Index: ELF/Writer.cpp =================================================================== --- ELF/Writer.cpp +++ ELF/Writer.cpp @@ -681,11 +681,12 @@ RF_NOT_INTERP = 1 << 17, RF_NOT_ALLOC = 1 << 16, RF_WRITE = 1 << 15, - RF_EXEC_WRITE = 1 << 13, - RF_EXEC = 1 << 12, - RF_NON_TLS_BSS = 1 << 11, - RF_NON_TLS_BSS_RO = 1 << 10, - RF_NOT_TLS = 1 << 9, + RF_EXEC_WRITE = 1 << 14, + RF_EXEC = 1 << 13, + RF_NON_TLS_BSS = 1 << 12, + RF_NON_TLS_BSS_RO = 1 << 11, + RF_NOT_TLS = 1 << 10, + RF_DYN_SYM = 1 << 9, RF_BSS = 1 << 8, RF_NOTE = 1 << 7, RF_PPC_NOT_TOCBSS = 1 << 6, @@ -725,7 +726,7 @@ // but without SHF_ALLOC is placed at the end. All "Sec" reaching // here has SHF_ALLOC bit set. if (Sec->Type == SHT_DYNSYM || Sec->Type == SHT_STRTAB) - return Rank; + return Rank | RF_DYN_SYM; // Sort sections based on their access permission in the following // order: R, RX, RWX, RW. This order is based on the following Index: test/ELF/dynsec-at-beginning.s =================================================================== --- test/ELF/dynsec-at-beginning.s +++ test/ELF/dynsec-at-beginning.s @@ -8,9 +8,9 @@ # SHF_ALLOC sections. # CHECK: .dynsym {{.*}} A # CHECK-NEXT: .dynstr {{.*}} A +# CHECK-NEXT: foo {{.*}} A # CHECK-NEXT: .hash {{.*}} A -# CHECK-NEXT: .text {{.*}} AX -# CHECK-NEXT: foo {{.*}} WA +# CHECK-NEXT: .text {{.*}} A -.section foo, "aw" +.section foo, "a" .byte 0