История изменений
Исправление mittorn, (текущая версия) :
Мне вот кстати интересно, что мешало сделать то же самое, но с 64битным указателем, оставив под адрес только 32 бита? Боольшая часть софта вполне помещается в 32битное адресное пространство если не требуется aslr или большие объёмы данных. ABI конечно всё равно бы поломалось (указатель, прилетевший в обычный код становится невалидным), но зато новое ABI было бы по модели данных совместимо с существующим кодом и потребовалась бы просто пересборка из исходников. Так же можно по идее ограничить расположение/выравнивание этих дополнительных структур в памяти (если они достаточно компактные) и дать указателю ещё несколько бит, 36-38 бит уже покроет большую часть софта кроме совсем уж прожорливых случаев
Ограничить указатели 32мя битами можно как это, например, делает wine - просто маппит всю память выше 32 бит, если конечно других способов это сделать нет. Разве что придётся от vdso отказаться т.к он ни по abi ни по адресам не совместим
Исправление mittorn, :
Мне вот кстати интересно, что мешало сделать то же самое, но с 64битным указателем, оставив под адрес только 32 бита? Боольшая часть софта вполне помещается в 32битное адресное пространство если не требуется aslr или большие объёмы данных. ABI конечно всё равно бы поломалось (указатель, прилетевший в обычный код становится невалидным), но зато новое ABI было бы по модели данных совместимо с существующим кодом и потребовалась бы просто пересборка из исходников. Так же можно по идее ограничить расположение этих дополнительных структур в памяти (если они достаточно компактные) и дать указателю ещё несколько бит, 36-38 бит уже покроет большую часть софта кроме совсем уж прожорливых случаев
Ограничить указатели 32мя битами можно как это, например, делает wine - просто маппит всю память выше 32 бит, если конечно других способов это сделать нет. Разве что придётся от vdso отказаться т.к он ни по abi ни по адресам не совместим
Исходная версия mittorn, :
Мне вот кстати интересно, что мешало сделать то же самое, но с 64битным указателем, оставив под адрес только 32 бита? Боольшая часть софта вполне помещается в 32битное адресное пространство если не требуется aslr или большие объёмы данных. ABI конечно всё равно бы поломалось (указатель, прилетевший в обычный код становится невалидным), но зато новое ABI было бы по модели данных совместимо с существующим кодом и потребовалась бы просто пересборка из исходников. Так же можно по идее ограничить расположение этих дополнительных структур в памяти (если они достаточно компактные) и дать указателю ещё несколько бит, 36-38 бит уже покроет большую часть софта кроме совсем уж прожорливых случаев