diff options
author | John van Groningen | 2013-07-17 11:54:59 +0000 |
---|---|---|
committer | John van Groningen | 2013-07-17 11:54:59 +0000 |
commit | 4cbb339b7d664b96121044f90a25e69a0be4532a (patch) | |
tree | faf327811e4689c2ef84794c60ea5e5fdcd637fb /cgaas.c | |
parent | store pc relative offset instead of descriptor in code section for (diff) |
make global labels protected for position independent code on linux
Diffstat (limited to 'cgaas.c')
-rw-r--r-- | cgaas.c | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -6861,8 +6861,16 @@ static void write_object_labels (void) label=object_label->object_label_label; #ifdef ELF write_l (object_label->object_label_string_offset); +# ifdef LINUX + if (pic_flag){ + write_c (ELF32_ST_INFO (STB_GLOBAL,STT_OBJECT)); + write_c (STV_PROTECTED); + } else +# endif + { write_c (ELF32_ST_INFO (STB_GLOBAL,STT_FUNC)); write_c (0); + } # ifdef FUNCTION_LEVEL_LINKING write_w (2+label->label_object_label->object_label_section_n); write_q (label->label_offset - label->label_object_label->object_label_offset); @@ -6900,6 +6908,11 @@ static void write_object_labels (void) #ifdef ELF write_l (object_label->object_label_string_offset); write_c (ELF32_ST_INFO (STB_GLOBAL,STT_OBJECT)); +# ifdef LINUX + if (pic_flag) + write_c (STV_PROTECTED); + else +# endif write_c (0); # ifdef FUNCTION_LEVEL_LINKING write_w (2+n_code_sections+label->label_object_label->object_label_section_n); |