ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- ELF> @x@8 @@@@II@@@ )))``888 XXXDDStd888 Ptdp|p|p|QtdRtd)))pvpv/lib64/ld-linux-x86-64.so.2GNUGNU{1S>EG9GNU$"E #%&'(3nm@擘<OD9L> h H>[jugUa`(cL34 Ki= 3: ;EY  G   R  ^|o u d|  H%  w o  $ {  "v  Z   %P6 &j   ,BO+ Uk  !   T > z  _OJ $1 F{ h ; fUH W\ \   UF>\v /MH  [  v 4  _  :d      Q  g   > au K% +qtV 3r  a H, 6 P   P ' R  * z9"N   N ` 6`l#o@  0SP7h}'A0 _ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTablehtab_find_slotbfd_elf_parse_eh_frame_entriesbfd_elf_set_dt_needed_namebfd_getb64bfd_get_compression_algorithmbfd_set_section_sizebfd_link_add_undefbfd_check_formatbfd_tellbfd_hash_newfuncxexitbfd_set_archive_headbfd_target_listbfd_set_section_contentsxstrdupbfd_get_archbfd_make_section_anyway_with_flagsregister_ld_plugin_object_pbfd_set_gp_sizebfd_emul_get_commonpagesizecplus_demangle_name_to_stylebfd_set_assert_handlermake_relative_prefix_sch_tolowerconcatbfd_set_errorbfd_set_error_program_name_bfd_elf_strtab_strhtab_hash_stringbfd_is_local_labelbfd_elf_get_dt_soname_sch_istablebfd_make_readablebfd_elf_set_dyn_lib_classbfd_section_already_linked_table_initxmalloc_set_program_namebfd_allocbfd_check_format_matchesbfd_close_bfd_pex64i_swap_debugdir_outbfd_elf_get_bfd_needed_listbfd_elf_add_dt_needed_tagbfd_get_mach_bfd_coff_read_internal_relocsbfd_close_all_donebfd_get_compression_algorithm_namebfd_hide_sym_by_versionbfd_make_section_old_way_bfd_pei_write_codeview_recordxcallocbfd_errmsgbfd_find_targetbfd_elf_size_dynsym_hash_dynstrbfd_openr_next_archived_filebfd_plugin_target_pbfd_get_arch_infobfd_new_link_orderhtab_find_slot_with_hashbfd_hash_set_default_sizebfd_hash_lookupbfd_section_already_linked_table_freefilename_ncmpbfd_arch_mach_octets_per_bytebfd_elf_get_runpath_listbfd_get_section_by_namelrealpathbfd_get_target_info_bfd_pex64i_write_codeview_recordbfd_map_over_sectionsbfd_elf_get_dyn_lib_classbfd_scan_archbfd_get_gp_sizebfd_bwriteunlink_if_ordinarybfd_make_writablebfd_elf_get_needed_list_bfd_elf_map_sections_to_segmentsxmallocbfd_set_section_flags_bfd_std_sectionbfd_get_unique_section_namebfd_putl16bfd_set_arch_infobfd_arch_get_compatiblecplus_demangle_set_stylebfd_elf_size_dynamic_sectionsbfd_iterate_over_targetsbfd_set_default_targetbfd_link_hash_lookupbfd_set_format_bfd_elf_match_sections_by_typebfd_get_next_section_by_namexreallocbfd_emul_get_maxpagesizebfd_elf_discard_infobfd_set_symtabbfd_get_reloc_code_name_bfd_elf_strtab_lenbfd_set_error_handlerbfd_sprintf_vmabfd_putl32bfd_octets_per_bytebfd_link_hash_traversebfd_getl16bfd_seekbfd_record_phdrbfd_plugin_open_inputbfd_hash_table_initbfd_generic_link_read_symbolsbfd_link_check_relocsbfd_scan_vmabfd_hash_allocatebfd_getb16unwrap_hash_lookuplbasenamebfd_getl32bfd_statbfd_createbfd_hash_traversebfd_demanglebfd_putl64bfd_use_reserved_idbfd_arch_bits_per_addressbfd_hash_table_freegetpwd_bfd_fix_excluded_sec_symsbfd_plugin_close_file_descriptorbfd_wrapped_link_hash_lookup_bfd_elf_linker_x86_set_optionsbfd_get_errorbfd_make_section_with_flagsbfd_breadbfd_getb32htab_create_allocbfd_get_section_contentsbfd_reloc_type_lookupbfd_openr_bfd_pei_swap_debugdir_outbfd_openwbfd_hash_table_init_nbfd_get_full_section_contentshtab_findfilename_cmphtab_deletehtab_createcurrent_demangling_styleobjalloc_free_blockbfd_elf_record_link_assignmentbfd_set_start_addressbfd_initbfd_printable_namebfd_canonicalize_relocbfd_get_reloc_upper_bounditerative_hashbfd_make_section_anyway_bfd_elf_tls_setupctf_closectf_link_add_ctfctf_errmsgctf_link_shuffle_symsctf_errwarning_nextctf_bfdopenctf_errnoctf_link_writectf_createctf_dict_closectf_link_add_linker_symbolctf_link_add_strtabctf_linkxstrerror_xexit_cleanupjson_deletejson_loadsdlclosedlsymdlopendlerrorfflushstrcpy__printf_chkfnmatchexecvsetlocalefopenstrncmpdcngettextoptindstrrchrpipeperrordcgettextftellstrncpytime__stack_chk_failputcharabortstdin_exitstrpbrkkillrewindstrtokstrtolisattymmapfeoffgetcfgetsstrlenungetcmemsetglobstrstrstrcspn__errno_locationfseekmemcmpgetpagesizedup2__fprintf_chkstdoutfputcgetrusagefputsstrnlenlseekmemcpyfclosestrtoulstrcatstrcasecmpremovegetenv_obstack_allocated_poptargstderrmunmap_obstack_begin_1wait4_obstack_newchunkgetopt_longexecvpstrtoullfileno_obstack_memory_usedgetcwdfwritefreadwaitpidstrchrvforkmkstempsqsortsleepobstack_alloc_failed_handler__cxa_finalizefcntl__sprintf_chk__xstatmemmove_obstack_beginbindtextdomainaccesspipe2opterr__strcat_chkstrcmp__asprintf_chk__libc_start_mainferrorstpcpyglobfreegetopt_long_only_obstack_free__environlibbfd-2.41-4.el8_10.1.solibctf.so.0libsframe.so.1libz.so.1libjansson.so.4libdl.so.2libc.so.6GLIBC_2.2.5LIBCTF_1.1LIBCTF_1.0GLIBC_2.27GLIBC_2.9GLIBC_2.14GLIBC_2.8GLIBC_2.4GLIBC_2.11GLIBC_2.3.4/opt/rh/gcc-toolset-14/root/usr/lib64        b ui wR d R-0q/p/m ii  ii ii ui wti )!)p!)))A)A)A)B) B)B)B)%B*,B*^*H@*:B * Q(*>B0*DB8*KB@*SBH*ZBP*`BX*dB`*mBh*vBp*|Bx*B*B*B*B*B*B*B*yB*E*B*B*Xe*B*B*B*B*B+B+B+B+B +E(+B0+B8+B@+BH+BP+BX+B`+Bh+Bp+Cx+C+HA+C+C+C+&C+5C+HC+_C+pC+}C+C+C+C+C+C+C,C,C,C,D ,)D(,7D0,?D8,FD@,SDH,^DP,eDX,kD`,pDh,uDp,}Dx,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D-D-D-E-E -E(-E0-#E8-F@-9EH-?EP-FEX-SE`-Ch-\Ep-uEx-eE-mE-|E-E-F-fD-E-`D-E-E-E-E-E-E-C-E-E.E.MD.E.E .E(.E0.F8.F@.FH.1DP.FX.(F`.8Fh.?Fp.EFx.NF.cF.hF.sF.~F.F.F.F.m~.F.F.F.F.F.F.F.F/F/s/F/F /G(/G0/G8/G@/-GH/@GP/DGX/RG`/eGh/wGp/Gx/ G/G/G/G/G/G/G/G/G/G/G/G/G/U/G/G/H0H0H0+H09H 0KH(0ZH00eH80wH@0HH0HP0HX0H`0Hh0Hp0Hx0H0H0H0I0 I0I0I0*I0V04I0II0ZI0fI0kI0pI0|I0I1I1I1I1I 1I(1I01J81J@16JH1FJP1XJX1]J`1hJh1dJp1mJx1rJ1wJ1J1J1J1J1J1Z1J1J1J1J1J1J1J1J1J2J2J2c2K 2K(2K02-K82=K@2IKH2RKP2bKX2gK`2lKh2qKp2wKx2K2K2K2K2K2K2K2K2K2K2K2L2L2EW2L2L2)L33L3:L3CL3NL 3RL(3VLh3gOp3آ3sO3C3oO3X3Wh34O(4R04O@4@qp484O4O4R4O5O05`@5yh5\Zp5O5P5O5P56(P06@6p66FP6`6]P67sP07vP@7Ep7P7P7B7Ф7P7B708P@8Ph8Xp8(8P8P8X8P8P89P09@9'Yh9Qp9P9Q9Q99%Q9(:ie0:9Q@:GQp:@:QQ:XQ:rQ:h;oQ0;@;ORh;Rp;yQ;Q;Q;R;Q<Q(<Q0<Q@<Qh<Qp<Ȧ<Q<<Q<=R0=@=Rp=H= R=H=R=p>"R0>@>.Rp>:R>VR>R>?cR(?R0?@?uRh?Rp? ?R?R?R?R@R0@P@@Rp@x@R@R@VA@R@RA S(AR0AS@A6SAVASAA9SASAبBn(BIS0B@BTSpB8BEWBWSBhCqS0C}S@CSpCCSCCSCSCS(Dz0D@DSpDSDSDSD TDE T0EP@E)TE&TE7TEF4T0F@FAThFgOpF0FHTFQTFoTGrT@G~TpGPGTGTHT@HTpHxHTHHTHIT0I@ITpIITIHITIJT0JT@JQMhJ UpJUJVJ/UJJ8UJKRU0KbU@KUpK{UKUKpK^KSKULU0L@LUpLЭLULLUL(MU0MP@MUpMxMVMM'VMVN^(NS0N,V@NEVhNIVpNNRVNcVNVNVOV0O@OVpO@OVOxOVOPV0Pد@PVpPWPWPEPPPWP5WQMW0QbW@Q}WpQWQWQHQWQRW0R@RWpRWRXRذR$XS3X0S@Smjojzjojoko ko@ko`kokok pkpk$pl!p@l>m`lolzlololomo mo@mo`mom pmpm$pm!p n>m@no`nznonononooo oo@oo`o popo$po!pp>m po@pz`popopopopoqo qo@q p`qpq$pq!pqtqtruru(rt8ru`rDtprGtr)ur4ur1ur;urDurGusUu sJu@s_u`s{|svsnususutu tu@tu`tutztutvtuv uv@u+v`u+vu6vu|uIvu pv]v vxv@vv`vvvvvvvvvvwv wv@ww`w#ww7wwJww^wwuwxw x@xw`xwx*xxBxxVxxixyzx yx@yx`yxyxywywyzzw z x@z"x`z:xzNxzaxzrxzx{x {x@{x{s{x{x{x{x{x|t|t(|u8|uH|tX|u|Dt|Gt|)u|4u|1u|;u|Du|Gu }Uu@}Ju`}_u}{|}v}nu}u~u ~u@~u`~u~u~z~u~vy @v`vww+v+v6v |@Iv` p]vxvvvv v@v`vvvw#w7w Jw@y`uww(yy w@w`Bx:xVxNxixax zx@rx`xxxxxx x@x`zw xsxxx x0x`zooE{m~{ ~0jQ@|P|`|pE~(|0|9|{ QЇw~A|d~H|8~ C0q|@N~PP|`-Cp>~n}~}`}t 0{`pЉ u}0@P` p*5@GQYЊ`jw '0?@KPS`pasÁЋӁt 0@`'pKtn} ~}0@`}Pt`p{Ѝ 0`u}p *5Ў@GQY` j0w@`'p?FQyavЏhÁ Ӂ0t@P`p'АKt@#H#PX`#hp`x 8z{ p(0NZ@HPЩX ``h p0xp @(%Ƞ%Р%ؠg@`@` (0)~8(@`XH`PX?`0XhXpxP[X\0WQe=pWȡ`PСQW0YT@(d0e8e`ph`px?ppP[Pq\0`pjȢVpТcpآ@p`PQoq Pm(@HdPeXe`?PP[ ȣ\У0أ0ppyp`PQ(`0@@H@hdpexe@`?ȤФؤP[\0rr (`P0QHP`h@deez{Tt NuP`{U{ئr@t(s8Pt`xssȧsاss(@SsPhosxsrȨ:sr0"s@Xxh$tȩ`Щة00 (x0r8H`P@Xh`p`xpz{Tt@Nup`{U{rDt 0s@Pt`psssЬssSs 0os@Ps`pr:srЭ"sx$t@ H`PX` hpx00p yyȮPЮ0خ`@P `h`px?pP[\0` ȯyЯyد`PQ(@HdPeXez{l{{`{@U{{б{{@z|Pz`|p|||rȲr r 0`8@X``hˀ`ـ`г` y( y@`HyP7h`pxȴˀـ0`h` 7^lȟП؟  @()&$ !0" (08@HPX ` h p x ȗЗؗ !" #($0%8&@'H(P)X*`+h,p-x./01234567Ș8И9ؘ:;<=>?@AB C(D0E8F@GHHPIXJ`KhLpMxNOPQRSTUVWșXЙYؙZ[\]^_`ab c(d0e8f@gHhPiXj`khmpoxpqrstuvwxyȚzК{ؚ|}~ (08@HPX`hpxțЛ؛ (08@HPX`hpxȜМ؜ (08@HPX`hpxȝН؝ (08@HPX`hpxȞО؞   ( 0 8 @HPX`hpxHHHtH5%@hfhfhfhfhfhfhfhrfhbfh Rfh Bfh 2fh "fh fhfhfhfhfhfhfhfhfhfhrfhbfhRfhBfh2fh"fhfhfhfh fh!fh"fh#fh$fh%fh&fh'rfh(bfh)Rfh*Bfh+2fh,"fh-fh.fh/fh0fh1fh2fh3fh4fh5fh6fh7rfh8bfh9Rfh:Bfh;2fh<"fh=fh>fh?fh@fhAfhBfhCfhDfhEfhFfhGrfhHbfhIRfhJBfhK2fhL"fhMfhNfhOfhPfhQfhRfhSfhTfhUfhVfhWrfhXbfhYRfhZBfh[2fh\"fh]fh^fh_fh`fhafhbfhcfhdfhefhffhgrfhhbfhiRfhjBfhk2fhl"fhmfhnfhofhpfhqfhrfhsfhtfhufhvfhwrfhxbfhyRfhzBfh{2fh|"fh}fh~fhfhfhfhfhfhfhfhfhrfhbfhRfhBfh2fh"fhfhfhfhfhfhfhfhfhfhfhrfhbfhRfhBfh2fh"fhfhfhfhfhfhfhfhfhfhfhrfhbfhRfhBfh2fh"fhfhfhfhfhfhfhfhfhfhfhrfhbfhRfhBfh2fh"fhfhfhfhfhfhfhfhfhfhfhrfhbfhRfhBfh2fh"fhfhfhfhfhfhfhfhfhfhfhrfhbfhRfhBfh2fh"fhfhfhfhfhfhfhfhfhfhfhrfhbfhRfhBfh2fh"fhfhfhfhfhfhfhfhfhfhfhrfhbfhRfhBfh2fh"fhfhfhfhfhfhfhfhfhfhfhrfhbfh Rfh Bfh 2fh "fh fhf%fD%fD%ޕfD%֕fD%ΕfD%ƕfD%fD%fD%fD%fD%fD%fD%fD%fD%~fD%vfD%nfD%ffD%^fD%VfD%NfD%FfD%>fD%6fD%.fD%&fD%fD%fD%fD%fD%fD%fD%fD%fD%ޔfD%֔fD%ΔfD%ƔfD%fD%fD%fD%fD%fD%fD%fD%fD%~fD%vfD%nfD%ffD%^fD%VfD%NfD%FfD%>fD%6fD%.fD%&fD%fD%fD%fD%fD%fD%fD%fD%fD%ޓfD%֓fD%ΓfD%ƓfD%fD%fD%fD%fD%fD%fD%fD%fD%~fD%vfD%nfD%ffD%^fD%VfD%NfD%FfD%>fD%6fD%.fD%&fD%fD%fD%fD%fD%fD%fD%fD%fD%ޒfD%֒fD%ΒfD%ƒfD%fD%fD%fD%fD%fD%fD%fD%fD%~fD%vfD%nfD%ffD%^fD%VfD%NfD%FfD%>fD%6fD%.fD%&fD%fD%fD%fD%fD%fD%fD%fD%fD%ޑfD%֑fD%ΑfD%ƑfD%fD%fD%fD%fD%fD%fD%fD%fD%~fD%vfD%nfD%ffD%^fD%VfD%NfD%FfD%>fD%6fD%.fD%&fD%fD%fD%fD%fD%fD%fD%fD%fD%ސfD%֐fD%ΐfD%ƐfD%fD%fD%fD%fD%fD%fD%fD%fD%~fD%vfD%nfD%ffD%^fD%VfD%NfD%FfD%>fD%6fD%.fD%&fD%fD%fD%fD%fD%fD%fD%fD%fD%ޏfD%֏fD%ΏfD%ƏfD%fD%fD%fD%fD%fD%fD%fD%fD%~fD%vfD%nfD%ffD%^fD%VfD%NfD%FfD%>fD%6fD%.fD%&fD%fD%fD%fD%fD%fD%fD%fD%fD%ގfD%֎fD%ΎfD%ƎfD%fD%fD%fD%fD%fD%fD%fD%fD%~fD%vfD%nfD%ffD%^fD%VfD%NfD%FfD%>fD%6fD%.fD%&fD%fD%fD%fD%fD%fD%fD%fD%fD%ލfD%֍fD%΍fD%ƍfD%fD%fD%fD%fD%fD%fD%fD%fD%~fDH% 1H5sHH1F% f%  1i1BHǢ1HCL,% `[f.AWAVL5ZkAUATUSHVH8|$Ht$dH%(HD$(1rLHD$@1L6H5OHwHHD$H8H=Ht$H|$=t1H52]H13H=H=PH=dHH=HʰuD$HT$ LzE1LdH-AQff.fI HHH YLDIM9uM A}/ L-A}tL HHگHH~HcHT:/8HPHH53?IH=P®:ծHҮfͮKfЮˮ@L!:Hh ~dQHHHHHAHBHPfHnHHfflHuH#H HH HVH   H=OHl$\$gIHdADsUL Ht$|$H+a|$Ht$Ч_H=hHR2 H==]u< Ѐ=/z5"|$dtSШ=&=.u =ܬHD$(dH+%( 1E9Ld5Aff.ff.AD9IcL|H4A?-uAmuAtH5NLtH5 NLmtH5NLZtH5MLGtH5ML4lH5MLUH5ML>H5ML'H5MLH5MLH5MLH5MLH5zML|H5mMLeH5`MLNH5SML7oMgf1H5MH1=HpHt,H5UHHMHN IH #̨QDփ<GP1HHQ#B ADDH=8=tH=٩H'#H=+t$=$H=HH5WHH>H ƆHwLH1L%jLHBHt#DHKLH1jHHuH L%/LHHt fHKLH1*HHuH==|=St'HH51HH1HD$(dH+%(1H5WJH1;L%IH=Ht"J\H=ۨH|$$3|$$H|H5sJ1HHH+V1ɀ==H ܟH=fH5QJt H5%J1L5H11LH=" H-\DH=HTfHH1oH  HHuH=§HL13eH@=H=1H57H1P1H5^ILH1H=-1H$<3=P&H-YHyHÃ~5HH5 WHlHKH5WH4{HcHHHIHH5]5H.exe@H5RLIIMrH5$Mu HcLH_9LHHÅLLL H=Ф1H$AA}fL5ew=B9H=IH1mH|$$H1H5QHHRHH01H5mHH1@HL$H=H)H?1H5H-%@BH=HHHHHIIH1H=_H1H5HH1BHH5rF1LH1lH@1H5:mHH1@1H5L|$@Lt$XIIIHH=YD1HKDuH-1H IDHHMHHO1IH)H5 L9t$vLl$8L|$@Hl$HDL$TLt$XAAr\HѝJcH>D E#HLH iH=pɍH 4H=LL$LL$>@H HH=H qH531LL$ATL-͌LL$LH L1LL$HL)F,#H5 LL$H=iH21H LL$HIcAL-2LLL$kH ]H=H HL21vAL5HIcH5H HNLоLH12L)H5  ]HcM1LMf.D ŋEXH=9H cHu11HJ sHL%Lȁ1H HL1XL)H5Ċ 0Df.H=H H01HJsHL%WH (LYDCƒȀHT$`kHD$`]HD$`OD-c>4/D$`"H}11腻HuH}bHuH}bHEHϊȊYH}蛼H}}H}o1c~H}pHuH=UKVBkaY4HEHD$`&HEoEHD$pHE)D$`HD$hH]oEH5HEH)D$`HD$p?fH}H5mHLeH5HLd$pHD$pf)D$`yHExHD$`f8ZHXE1HlJ4HHYmIIuH5HxH5HaH5uHJcH5kH3Std聭HD$`MUHXHLMLEm"=HuH}{%fAH}8$SHuH}1_?H}_1HuH}$`HuH}` H}$[H}U1^HuH}ZHuH13)HD$`HuH11)HD$`HuH*HD$`Hu1*HD$`lH}1*HD$`WH}1*HD$`B11y*HD$`/HuH}bTHD$`Hu1MTHD$`HUHXHl*HuH 1U*Hu11C*>>ɅmU Јt݈U ЈˈVD$`IHEHD$`;=IHMHUHXH}>>EHLMLXHHxH ՅPEӅP WH D$`D$`HEHx{HEHD$`mHEHD$`_HD$`QHEHD$`CHxHD$`2HXHD$`!D$`HuH=TSH}HԄ1H5 V&HD$`H1H5 15&HD$`HEHD$`HXHHxHD$`HEHhHUHHHHuH@HHXHT$`H4OH(HD$`HEH3HuHXHD$`HUHXJ$HD$`HUHXIHD$`Hu}HD$`Huȿ蕫HD$`H JHuȿ3H詩HD$`Huȿ(QHD$`gHXHuȿ'rHD$`HHUHX&SHD$`)HUHX4HD$` HuȿܪHD$`HuȿdĪHD$`Huȿ|HD$`HuHdHD$`HuGLHD$`HuE4HD$`zHuFHD$`b1-HD$`LHuH}OHD$`5Huȿ?תHD$`HUHu +HD$`HUHuHD$`HMHU?H ̨HD$`HUHu|ЧHD$`HUHu^货HD$`HUHu&蘧HD$`nHUHu>|HD$`RHUHu<`HD$`6HUHuDHD$`HUHu(HD$`HUHu HD$`HUHuHD$`HUHuԦHD$`HUHu踦HD$`HUHu-蜦HD$`rHUHu+耦HD$`VHUHu%dHD$`:HUHu/HHD$`HUHu*,HD$`Hu~ԧHD$`HEHD$`Hu!讧HD$`HuȋX蕧HD$`HEHD$`Hu-oHD$`P8HEHD$`r=8HEHD$`_~EHD$`E?uHUHD$`HPHUHHD$`1 8~M~E@flHD$`HD$`H HD$`HEHD$`HD$`HuH}Hj~HD$`{HuH}1HJ~HD$`[HuH=@~19D=R}(HUH~HP0 HUH~HP (   }}H }HXHuHh{HEHD$`H}zH}1jH}1ZH}1JHD$`1'H0oHHcH yH5k1HoHHcH vH5H u LeM1H5b8赸H1H1膺qH5H¼uLeMD$aGD$`=訸Fn(H H n'\$Mm'm'LL|HD$`H5F71ϷH1H1蠹1IHD$`Rtd5HD$`kQtd!HD$`WPtd HD$`Cf.f.f.DAWLGnAVAUATL%pUSoM9E1L5OL(H=L-L SLff.AH5  HcfAkH+C4Ht H8kH;tHC,1HtH胷茰C$E,$H[]A\A]fATI@USٷHt4h}HHc÷HCHtC LH8H[]A\H=2@USHHHtjHtWHxjH,H}HtCHHUB>jHBHH(jHIhHZhjH[]fKHj@HjH=)hH,H=iHEHiH,HvH}mAWAVAUATUSHL-iL iHciHiOdH=gM4$IvHTH9AV4HH)pA1f  HL9uM4$A~8uDAF4 pIAvHckIFHt7HcM4$HHhAVMI~H)HAF uIFH=01HÃH[]A\A]A^A_MI>H fH Hc9NI~HcH$IA9)HWhH@hD=1h1L4M.E}I}DA;m- hHc/IH@D(IH@H f;A~8ff.gAFH=e%HgHgD%gL4M.`@AAIcҵIEIHxHAD`>FgAFOtD%2gM.AE8H=NeAu1L-gL g1OtM.D=fE}E1H5.H1迯L-fL flH=K.H=.fUSHH{ffu"HwfHfHHc]fHBH9s$HSH;fS=fH[]fHCH-EdHfYtuH=@d1H)HcH dfHff.;*t&tb uc!*uff. *t/t8 tυu1H54蕬HH1g*uXAWAVAUATUSH8 (ee eu dH=BcWH=,ceHdHHdHHPdHPHHbHbHddbHLL5H-2L=L-dt@bHH8[]A\A]A^A_D\$ff.H5!d&dL%=dD\$Ht$HcE1Sff.@fAHcbH5bAF*Hb@HbH=aHHbHHbHHZH=`H`HZZH`HbH낋aaj`H=f`H _^TT^RR^ww^dd^|^h~^YYTj^UU@V^??,B^``y_D\$'Hp_^{{]||H=9_蔪H]zH=_wH]yH^`}H^`R_Zp]F\]>>2H];;4]::  ]99 ]==\88\++\,,\**\))~\<<j\QQVl\PPBX\OO.D\%%0\\\[[  [11[22[//z[""f|[||Rh[&&>T[,,*@[>>,[[  [  ZZ!!Z~~]H=]HH+[H]HYTYH[AAAA[LA&YPHcHXHcHxW^^awW]]McW\\9OW%HXHXX-Xy )ZHVXD\$L%BXH51/LHLMVccVbbVxxlVXnVDZV0FV2VV VHIWHx蠢HUUaaD\$L%WH5UZZzUfVfpUfKaU7MU<<#9U%%%U//U--T++T**T??TTTNNoTMM[qT((G]T''3IT665T55 !T&& TSS}}S[[S!!S44SkSggWmSFFCYSHH/ESGG1S;;S:: S(R))R{{R}}R==RvvRlllRiiXnRhhDZRmm0FRee2RqqRpp RooQ77QCCQ--QDDQjj|Qkkh~QJJTjQII@VQWW,BQVV.QXXQAAQ@@PEEPBBP33PLLP00xP..dzPKKPfPSS<RP$$(>P##Hc5QD\$H |QH=eQ@LOOOO__ 'HwH=肌HKRH<PQHQPHEQR ЈR H=tKH H O&H\RHERD\$Hc51RHHpH5RHt$Ht$L ,PLUD\$HcH FH5 PHcD\$HH5QHt$Ht$D\$L HcH fAMHCMH0MH MLLH.KHKH[]@'駐JKATIUHSӃ 5JHKL$HgK4LH5KH^LHt H5bLHH5KHJLHξ@H-GJJ È]L[]HA\@H51H1˔iJ/AUIATUHSHHJK HJ5IH,HgJ4HuKHt H5yKHH5JLbIHΉI苒@H^HchHHHELHCHPI HHC HH1C(fAD,kHSHC4H[]A\A]fDH51őH1蛓9IH,HPH,`JVJH,HPH,0J&JH},HPHr,JI HM,HPHB,II H,HPH,IIH+HPH+pIfIH+HPH+@I6I H+HP@H+ IHcUGH.G I HGHHH Gff.@jGHGH@AUATIUSHdH%(H\$HHH蒌IH$8HPIl$Hu/HHt H{H蔓uLk:f. kfHn~OLhH@flHOLjHLHJHD$dH+%(u7H[]A\A]1H5ՎHH1訐1ff.AWAiAVAUATUSHdH%(H$HHD$`聐HD$HrHD$PcE11HD$XHD$HL -Iff.P t"LT$HHcA HWDQAH8t)x8foHcփHHT$Pfo@BH@L9uHT$HHcHL$PLL$XHkHcƉHHD$PHIcHHD$XHHD$HHwHH=nL)A@ff.@H -u AGuAND9sxHBA@tjHfD@LT$HHcA:WHL$HHc҃:foIcAHHT$Xfo@BH:HA9uFLd#ff.ff.@HI9tXH}?-ulut}HHxPLEH GIHH1I8LmI9uHD$DD$L5D$$HD$D$H$f9-<D$DtHDuvu-s<L$HL$PHD@HT$HȎAA?t?DT$DEuA _DuuAA+KcL>fL$HL$XHDH2-;菋Af.HcL,AED9twH=;|1H5 ފLLH1讌DVuA+e1H5J 蝊H1sfDDu1H5 bLH15DtpH|$XH|$PH|$HHHHHD$h;H5"&;-;%H莊HxL YtLHL%H cH1H|$hH*苍1H5E&耉H1VHHHt 8 L$l$Hz&t1ff.1H1H1uHD$HHu@fD}Hk:H蚉HHuڀ}ZH|$螅=F?wF?ȀFE EHD$`ʃ]HH8tk\$$ \$uaHHeH* EШ=FRDH#eEjH5^FHHf.HHHuHHH>|$U E=mFtNH=Ft1H5H%蛇H1qH=Ft1H5Q%tH1JDf%f=H$dH+%(+H[]A\A]A^A_À=FHH8HHu!fHȃHHHuHD$`H调 )DʃD$ D=ZEy C C Ct6L%H{H5LD1ZHL1-C%?DDDnCIH*EH56HD$0Ht$(HH|$(Ll$0l$8IDD|$H=o21Ht$hsIHD$h8L%?H=?2H=.21H5>H1_H1Ha@L@@H51H=R>+(H=':ҡH#:H=:Ho9} =?r?f?[?H=>1 L%-1H5Ln}>g1?[%w=Ol=`=7 W=@+ H=H=>H>L%0H55LO=f%?f @f< <'>H=N0H11L.>H=*0H118|H>lH=00[ y<@OH/HA<< [<0%O<$ =< 6< pH=/ >>H1Ht$h~IHD$h8 AS@L%=H=?/:L%=U5H/Hy=lH=/L%=Hz<L%= 5Hj7Ŝ|$t4D$!1|$D$a|$uD$D$H=y.111HH|$`HH=M.L%<AHD$`L%<W4H6z;n;b;V;J;>;2H=<L--H}LI }I|~H5-D j;L;HI1H wH踉H=;\yAXAYL%;=;&9< 9=9?w9?@99[r9JL%,M H5L+ H5Lr:L%,H5xL :H5i,H=D$$:H58,H= H5 ,H=jtoH5,H=\W p8 K%d8? _8 3%S8' @8@H=+11軄HB H9997?Ȁ7H_+H`8HL+HU8L%9+=L {HHA<$Lityu$H51,zH1|L%*LL)HcHT$0HHL$(|HT$0H5*HIăHc~HL$(Ht$hLAD vHD$(HD$h8E H|$(9U1LHܹH=`*H"66H=*h1"66j s2^%g2RH=)'A75 >2@)%22 '2H=)ŀL%)1H5xHL1z 571H=Q)H5PH=`/j1W/H;/vH=)7H_tAąxD7wB c56H=(ZzH6666 5H=(!L%p(H5L{H5޿L{H5տL{H5ɿL|{t1H5>1wLH1yO Q0 t AhH1kH5H1`sH1kHkAM9I@I~(AFtA~0tȄIHL1rH)s(f%?f f(X1H5kH1l61H5jLH1lD4$L@HH51ZrAHjAADIEEE<HNl0(MtAL1rjH53H1qL1MjHujE|AHLHH|0umLHyHHHHtD`8AtAH H7IAHGȄHH51AKqH\$ADff.H59 AmAuHt$1diH\g E1ZfHc1L$H5{.iHL1kPH|$0l$8D|$`HH1k1H5`HH1jHٺH=.j1H5_HH1j1H5_HH1j1H5_HH1oj1H5Al_HH1Jj1H5G_HH1%j1H5"_HH1j1H5^HH1i1H5=^HH1i1H5h^HH1i1H5^HH1li1H5i^HH1Gi1H5D^HH1"i1H5^HH1h1H5]HH1h1H52]HH1h1H5M]HH1h1H5p]HH1ih1H5f]HH1Dh1H5A]HH1h1H5]HH1g1H5<\HH1gH5i1\HH1gH51\HH1gH5<u H51n\HH1LgH5 1<\HH1gH5>1\HH1fH= )K X1H5"[H)H1fcH$dH+%([f.H5LXu@H51p[HH1NfH5/1H5:[H1][&Y1H5+[LH1\,GX8$1H5HZH1\HuHZH=\L^H|$hLִH I/IHH LD1e^f.f.f.fHHP0HHH0H9r1H9ff.H?H6HW8HN8H9r H9rWN9r19H?H6HW0HN0H9r H9rWN9r19ff.SHHHtS tw2t u[fDH{H8uHHHu[@H{0tHHHuftDHGHHGHHGPff.@UHSHHH5HHH)HH oHH9H{IHHH!H@HH)I)I9HBfHnfl)(HAHCH)Htd@HH@HuHJHH[]DH=lHH H5HH9[ OHKHHS[]ÐSHHH9=AHt11Hw/H=HHcH>fDE11HHHuH[Q wHu€%u̓ uHtH@8HtmHtc@$HEH[fDHuHPztHR:.uz{Et1E1ngH=ǰYH[f.HH[H=AUIATUSHH^8HF H~(H9r II)L9s]HH9uHuPHtEIA8L&1H5 L(HVHMHH[LH1]A\A]aX~PtH[]A\A]IA8FP1L&H5 H(H@VHLHHH1[]A\A]XSHHHHUHHHpHx H@HHHǀ1H)HHB(B HB0HHB(ǂHHH1H=HpHtHHHJ@H0HB8HHH[ÐH߾HT$^YHT$HH2H1[DHH?PYHHHvH+YHff.RwBAVAUATUSHHt%CtZw@t u H{HHu[]A\A]A^@H=GWuH=dDHk L-L5HtLeLLaXt$LLRXtE8tNt1tCHmHu^bE8D=QuE8fD=9uE8fDSuu&u4 uBuP[f1H=Vt1H=jVt1H=lV t1H=YVtH=1[EVDHH@xu HtG'@ubHH5=4Qv 5 Vu"fуt u HD H=WH{UAWAVAUATUSHHHHo@dL$%(Ld$8AEH3H=31tUH;Rp)DHC`H=Ht H91EL- HDLd$LLg[ H1LH=HHTHCHHtH9uEHC`HtH eH9HD$8dH+%(HH[]A\A]A^A_DLQxCLcH1 W H56I`QLH1cTyfDLkXLh0$=[LMaID$H  HID$HL4H H)L9L= LL9 H HHHH!H HH)H)H9HB1fHnfl) I$Ht2ff.ff.H0H@уI4HuIt$LE1H N1I|$tDIHH1@S#1>@H?tEt%uUH H51EfDHH51EHH51EfH51Eff.fPXHCH=H0fPXHLH=nHb0fAVAUATUSH HT$dH%(HD$1Ht[HIH-If.{CHcDH>H{0HT$LLHD$HHuHD$HT$dH+%(H []A\A]A^fHT$H=LL9HD$HHhfDH{0HT$H5K==&HC @HD$HH IHC ^HHD$HHDA$H{8 ЈHT$HC8HT$Ht&u@$tHA*HP0HT$H{LH*HD$HS8HB$Hr0%Ht$= HB@ HHHD$H{xHtHT$H5HD$*fDHC@%H@@ @HHD$HHH{HT$H5H==C- H5 9BHD$HHGfLsHA~Iu8HHT$LHHD HH;f.H{ 3H==HHfDHH"HC HHB0HC HHC8OI~L;-t;<_uff.H?_tH5v=A$Ls <.uu<1H5x9H1N;1H5V9H1,;>HD$dH+%(uHH=ǒ+Z9f.AWAVAUATUSHHdL$%(Ld$8DgAHDHHHcH>@HD$8dH+%(M H=HH1[]A\A]A^A_;Ho1H5ѓy8HH1|;H{sHD$8dH+%( HH[]A\A]A^A_*@~*HCHu81PHx?.u@HH HD H H=HƓ1HBH{/*ff.@HD$8dH+%(% HH[]A\A]A^A_DH(?)HC(Lc0HtL`0C- HPHcH>fH  H=L%AHCHHXHlHt) H=L1HAH9uHD$8dH+%(S H5kHH []A\A]A^A_+9HD$8dH+%( HHH1[]A\A]A^A_H  H=g+AH[HtfHH%HHuHD$8dH+%( H HH [H= ]A\A]A^A_@fDHOH;HD$8dH+%(` HΑ:HWH5sHD$8dH+%(( HHH=1[]A\A]A^A_8H@7'HC@LcHHtL`0HS *LH=BHHB HHH1*8Hs(HU1H=8H{0q' HHLHK6fDHw1H=ǐ7H5oHtH=s17HD$8dH+%()H=@&HC@HtSH0H=`1L-"e7HC@L`Mt I4$L1B7Md$MuH=.1*7{(HsH3H=Џ17{L5{H=16Lc MyfA|$8AD$8H ЇHcH>fDH;=AHo8Hw01H=M6HHE0H{0H3)%HU@Hu01 H=H46Le8L9e0t H513LH1 6H{xHtHZH5^Y%HkH,ff.HHHmHuHD$8dH+%(%HOHyH=2HH1[]A\A]A^A_P=H '1H=Y5 $HC LkHtLh0 HS1LH=H 5HC(HHt7HhL%Lt@MH=L1HAT.USHdL$%(Ld$I+HPHH6PHH} +4HH$8uwID$H9t%HwdHT$dH+%(uYH[]A\ÐH5AL'uH)HH5 Ld'ufD)ff.HATUHSH+L@*HHt'HLuLH[HtP5L#@uHuLt$HE0HtHHtH0H;qu[]A\[1]A\1fDHAUIATIUSH*DuI|$LAt1M$$Mt(AD$t1uH=LAuH[]A\A]I\$HHu@HHtHkLHuH}`uE$uAff.fHSHCt;w!t u H{HHu[@uH=DHCHHtр{(uHHufDHPHJ$ Hu>ATUSHHt7H-IH9t(CtDw*t u H{LHHu[]A\uH=LLfHCHH5HtHHHQ`Hu(ff.HHtHHHQ`HtH9uB%u܋Q$tԁtHy@tA$ff.@AUIATUSHH&Hx(HI&Hx(HAEIMLH50ff.DHHBAuHKHt/H5ff.fDHHBAuL-@LL2Huff.fHPuHLH}2HufDHPuLHT2Huff.fHPuHH$2Huff.fHPuA$8Uue ff.AHH:Tu1HȄuDL!H!H[]A\A]fD@L1ff.ATUHSHE9CL#H5L(tqH5L(t^H5Lv(tKH5Lc(t8H=t'HuLiHuAHcH8SA9~HO[1]A\à \[1]A\G uڋE9CuF@H %HSHHH)H9rOH5HH9tlH I[HHH!HHH)I)I9HBfHnHfl)ÐHH=7HH5H HH9u ff.AWAVIAUIATAUHSH#Ht,HHfHnL=pfl) $fHH@IGHI_f%CPC`HC(LkXfC`HC C0C@AHvJcH>Dfo,$kMt }/fK`fo4$KasHHHCPHsHH[]A\A]A^A_f}:HHC1HH=<~1#fK`HCfo$fK`Sfo$$K`cvfDfo$[bH= {1$L@1VL$HI9rff.HI9tG}/tI9tf.t HsHHHu[]A\fDH5HHHuHs0HlHHuf!H='sOHHa랐ff.@H5 HHHHH9sHPHvHgHH=]PfDHMHH9sHPH@H2H#Pff.ATIUSHHt?=H5u!tH fLH[]A\eDH=H4111HljӃ~L#l []YA\fDfHH=aHsAUATUSHHIL%*HAMt-L@H;HH[HuMd$MuEu5H5SHt"H561_H1H10XHIfooID$I$H_ID$ID$ID$0ID$8ID$@ID$HAD$PAD$ L ID$H @EuHL[]A\A]DH5<1H1H1nHL[]A\A]E1ff.AWIAVI1AUEATIHUHSHDD$ dMIAAtDEt?H5TRHHMu)I$Et|$ u)H[]A\A]A^A_f.1HHȐH51H1[H]1A\A]A^A_AWAVAUATUSHXHT$HL$8dH%(H\$HHHE1DL$IIME1H-jMǃ{~CHcDH>H{0HL$8HT$MLDL$qHD$8ff.IIHE1HuHD$8HT$HdH+%(HX[]A\A]A^A_ID$8HH$ HL$8HT$MLDL$H=HD$8|@ID$8Ht$8HH+H0HCHKH Q@IT$8HS@HHHD$8B%3H+B0HHB@#HCIT$8HD$8H+B0HCH{ID$8IHC HCHD$fDIT$8HD$8H5H{H+B0HT$8HC0ID$8HC(0C H5j9BIT$8HD$8HD$8B%WH+B0HHB@GHD$8It$8HT$@HD$@LkLdAEuIE8.A$IA$L9%y HT$@LD$8L9xLD$8IH{8gzH{XHMHT$8H5=e=(t6Lk0LsX1H5;LLH1 ff.Lk8MHH@@qAE$bHSHt H: Lk0H5_1HL1Lk8HSAE$HR~B0AM(flAE0wHB@IE@jf.Mt>HsLL$HL$@HHHGLL$|$@tAIELD$8M\$8LPl tRIHtFI9tAHEUMLIMHfDH=ojfAB(f%f=]AB%BA$3I|$pHH5 mLL$0L\$(LT$ LD$LT$ LL$0L\$(LD$AB|A9K|sAK|AJ|HITHH!HL) IB@HL_ IT$@Ht&oB fofsffH~fD$H9q IS0I)MBXAC%u HH)HIs@MMZ`HD$8DHHH9qqH=i>[fM+C0MBXCIB0I+C0IBX/ L)Ht$HHIL$8A$HtID$8H$LD$@ILD$8fDHHHD$8HHB0HD$8Hf.IIEHAL5HT$8M9H{XH{hH5jHT$ HT$ D$D$xt$AIIDII!LMH)Ѓ=HD$ HC8~bHML+@0HHLtI=uH{Xt5HC01LD$0H5#HD$( HT$0Ht$(H1HC8H(fInH@Xfl@0HSPDL$HMH{LHS8Hr@L9Hz0H|$8B%Lk@MOH{`HFHi1HHC8HP8P$у&сHx@H{H3L9BLh@ rIH{xLl$8Ht HT$8LHs@HOHC8@$AHT$8|$HV8HsHH H;s@HC8@$u @HH8Ì|$Ln81Hf.IM@HHI8HI0H9L$8fDH5d1 H1k LL$IHHH9YzH=d&CHBH=dy<HH@xHCXHHrxfHCHHHP8@SH;C@tH{hH53gHT$ HT$ D$L$}HHTHH!eHS@Ht)AE$tzH:?*urH5wFHT$qHT$uXAM$ʉȃ HDHt#BHt#BLtHRHu1H=F Lk8HHS@AE$%=<|$H:H5EHT$ HT$uH HtsH9H5EHT$ HL$ HT$ u HL$HytE= u<=)MmH5uH521 LH1 HS@Lk8AE|HR8D$H=5D$IHD$ >HD$ HC8I1H=DLD$@L@8AJ|AD gJDHIHL!H)HHB@/HD$ HME1zVH=aHT$ HT$)IS0I)MBXAC%HH)HIs@HI1H=CIHC8Iu@P$уH I]@H|$ LD$ mHH@xJ< Ht$LLL$0LT$ HLL\$HD$(LD$(LL$0LT$ L\$HH8H9H0"$LN8L\$8Iy0Iq8I9LP@M ILLH9H9HC0H5$1HD$Ht$H1QHC8P$уkAB&IBHHtRI;B@tLIB`1LL$0H5wLT$(HD$ LT$(HT$ H1LLT$ LL$0LT$ HD$IB`HD$8H6 Hp0H)D\$E~DٿHHHt7HH!Hp8HH0HSXH|:IB`1LL$0H5HLT$(HD$ QHT$(Ht$ H1LL$0LT$(Iy@ HHZHD$HdH+%(uHr\H=^,ff.AWAVIAUATILUSH@HHHLL-1L=MfL H[Ht?H;HLuߺL1HL1H1H[HuMmMuHtXLHmfHnEH]H[]A\A]A^A_1H51H1/f.LH|$H|$ID@H511LL1H1\UH@AWIAVAHAUAATL%ULSH1H HhHHHtrAt'ff.ff.H;hHuHHHuff.@1HL裬HoIHSHPHHAL{HAD  ЈHCH[]A\A]A^A_@EA EfDH;hHu"HÄtD9txuHHuE71EtH51LH11iH5X1HH11Bff.fU1ҾH=ݽSHH-AHZIHo11HH=IY=HH5!H=HHo1Ҿ1H H(HH@HfHgHxHyHZH?HTH9H:1H=C]H3HxHX8H-HfHH[]1H5 MH1#ff.UH- USHH{w%CHcDH>@H{H[ {vH[]fDH[f-GwH{11gHtHx8uH1H[].fDH{oH{ fH[(mff.fATAUH-YSHH0HybHC8HtrH{XH@`H@XHHtH{`HtH{hHtH5[EHC8P|[]A\Hs0H=HC8HuHs0H=lDHC8HnHPLc01H5H@H(LHH1bHC80f1H5B]HH10ff.AWAVAUATUSHH/HtvIIE11AE tqM$$I,$HuHt9ff.ff.H[ Ht+I9uH[]A\A]A^A_DMtI9o tH=,WTM$$D+II,$HYHfE t?H}:f ;H}11HH}LMI97I$IMHIUHI$HHImHHEE11M +II쉅HmHEHӃ Xff.fDE@H(HuH]H5ܺ1 HHH1[]A\A]A^A_DHS(IG HB H[HP(HG IG H6Lx(H{(11ҾH_ +HC8HtHt HHHDI9t H[ HuHtdHw8H9HtMHBLIH]LHM=IAHHFHAH@HHHrHVI9.I<$%@HEL P1H5"H1fDL%a@H9_ @IG H-H HLHG(HMff.x Hp8HuvH@(Hu!H5طHHAHt\HHHBHL ILMHHH9]HATUSH_Lg0L9gt.H=?SgfHHtL9cHu"9txuHH[]A\@1H[]A\fDAWIAAVAUIATUSHHT$HHHX H1HE1Hu8HtQDf$Mt L$ILH=AL$t;E1A@u/HE HIHHu8HuDE1A@tHm HuMiDШDШ DЩDDЁ@DЩA%E1HuKwn$Mt L$ILH=AL$t D1LDH[ HHs8Hu؋n$Mt L$ILH=SAL$t D1@LDH[ H~Hs8HuD% @ LDH[ HtNHs8Hn$Mt L$ILH=ԴAL$t‰D1 @uIH[ HuMHD$ME1LHH[]A\A]A^A_A@tLDH[ HtHs8HtODf$Mt L$ILH=9AL$tDD1uI@DDDHE1Lf.n$Mt L$ILH=óAL$t D1@LDH[ HHs8HuDDШt/DШ t&DЩDЩ@hfD1E1fDHDE1A%u EHݾH[ HqHC8Ht%@$1t@PHDƐLHD$H*H("1Hu2Aff.ff.@$D1 HDH[ HHC8Hu݋1ff.AWAVAUATUSH8dH%(HD$(1H-D%Z1Hu0ff.ff.HmHHHE0f@D@uE`uEtHHtL-P$HcDH[HHC`HtH H9tC&0uԄu1LH1DAuH5\P1L5PL-PH1L=PH5BP1]H5:P1IGH5+P1H1H5P1HHIIATH1H=HOL% PHLZYHHu'DCL@H[HH H=aL1HS H=/HHLH=-1^HS(H=H1H{HtH=IL1${HYtCLT1L{LWH[HB1H5߰H1=%x6LH 1ҾH=H=1H5H2QH-*HtDHHUHHuHD$(dH+%(u_HH=߮H8H5[]A\A]A^A_eDD%1H5үH1L)fAWIAVIAUILATIULSHHU^$LHD$wMt$HD$LLH=֭H@NЩځ<Dڃ&sHM8HmQ(#A$] LILQ(HA$IHBPtAHE8OHLH]8H@xjAG|9C|sC|=I_`u0HLILJIHL @HIUHIELxLpH[]A\A]A^A_uTHH@x|Ã@؁%E؋~؃Dډƃ1ցutOA9t@% ؁A$I#Dž ЉӉA$u@I/H5^JHu5H;H5/K6u"Et<.XAO$KDH5JH\*H;H5JHD$HM8D$xDL+@%ÃDfDATIUHSHHvHtH3HMhH}0MHSNHsHt LHH[]A\ff.HAWIAVAUATUH-ASHHH{w&CHcDH>H=LHHuHH[]A\A]A^A_fMtI8u1LH{7AHAHcH>Mt I8?H{HH?nfDHC Ht xMH{1HSHx8HPX*1HPf{LsHiLMIff.fLbLLr H$LjLH$ LL访H$ hfH$@fInC {@uMAM8HsXHKXH~L|$8ILt$Ld$ HT$(HD$0bLH tbHt!HD$H@0HLb MuL MtIHLr MuL0LLwI/f.IMtIAE8tLLLzI7H{@tHD$LH@0HHHL` MuL"ILMILp MuM0LLLD$HT$L $L $HT$LD$IHqLyH[LHT$(HD$0L|$8HH;K`uHHC`fHHHsXHtLHHCXHCXHC`H=Lc MuL-ZFff.I|$HtL.fM$$Mu8{H{HHHfDH=7B_HHfDH{LlHHMLk0MfLLuHKhHS MLL7M6Muf.AIDgAu ?<=ѧD% fE1AIG8HD h$HDHfDA E1A DH E1AH@xuAfDHLf M+L #@HLv M5L0-@M4$IH T<HcH>HL$ AF|+A|uHD$ I6H8pIt$M|$H{oI:HD$ I6H8uHL$ AF|+A|DILy@HK`HfDH{H-=8Oǃ[DLzIG8K1LgHD$ H85I>$*$M')LwH5BL H5BLH5BLAH5BLAm~H5BLAPaH5BLA3DH5BLA'Mg0H51HL1E1H;&H=B>:f.L=Lz.AE1Af?AVAUL-AATIUS[I;M)HH~I~HE!LLHEH;H-UB0t.{Lct$LLHHuLI[]A\A]A^fDH]HtHHH9tHuSHHu ZH[HHtG{uCatHsH{0Htھ@tHC0H@HHt[f.H[H[fAVAUATUSGH t) t []A\A]A^HG[]A\H9A]A^@H=htg H=]<LcL9HIHuGH[PHt6CatH{LHHZRH*H[PHuLHHƋ8LHHHY6XH=HҢ5ĢHG H=kHGH2H5}H=D H 3=QDtWО<tI$=t D€E€=te AD[]A\A]A^@$=Ɵt f.Ls1H5FHL1%AD[]A\A]A^1H5ڠLH11H5LH1`H=AHHtt1=_9F tcHxHt 9B H=HHtH0H5ԙ1H5H1f.H5@1H5H1 fDt,H5r1LH1nH='qH31H5=hHH1;H2H5f.HH= ff.fHH=ff.H=̙t"HYu H̜@Hff.@UHSHHHHHHH=%HCtHH[]H[]fUHSH艺HHHHHH=śHCtH觑MHHH@HCH0HH[]fD=Uu=H\Ht*fxHP8HtH@ HuDG<v SHH9w(t[HC(H=;HpXH@`Hs0Hp01DHsH=:12HATL%ěUSHHxH5$1ډH1@EHuH[]A\A]A^A_DAMfAMfAMfAM fAMfEuMl$LA{Ml$HE1kff.USHHHtHCatHH[PHuH[]DUSHHOHtHCatHH[HHuH[]DHSHH8HGHH0HHH9)t HtH=1b$H{0H9=tGH5rH8HHHڔ}H{0H[H5YfH=0dH{0fAWAVAUATUSH(dH%(HD$1Gat0AHD$dH+%(H(D[]A\A]A^A_@HHCauu =tHH=141cH{0EH{0HT$rHALk0A A HLH{HC0D5L%L-H qAHAH9UHPHpHptHS`H-pf%f fHCH&{LH L-`L H H HH=HNpH9HPH=H@H/pH p{H؋KaHȿLk0AEH<d<bH-ݎHufDHmH+H}I}IL}H5#2ILht4McLLLuC&t<.uC|&auC|&ufAMILk0ICaA1L5'L='HfDH1LHLHl$HL$!H|$LHGLk0HLHHHbuLc0H5&1GHHL1E1gCatJIEH5gLAĄtwKaLfDA 6H|$'H0Lk0f.H5ē1E1HH1}Hk0H51yHH1LDcaAACaD҃ ЈCaLk08H5Ӓ1LH1Lk0H5r1LL-3H1H|$H7IHt+ff.@L1II4$HuH|$oH=t/1qLk0HD$dH+%(uH( H=+HD$dH+%(ufHD$dH+%(u1AWAVAUATAUH-'SHH8dH%(HD$(1Ht8{w*CHcDH>@H=DfHHuCHD$(dH+%(H8[]A\A]A^A_Au!LkMtH5*LBHH{0D-HHQHCHHH1d@H{DHHCCaHUHSXEtAH=*@Ht$HHD$L-PHt$u4H|$t[L9-,LkH51wHL1JHjHL$HPH HT$HPff.H;cHxHHOHEL-OALp0H{DHULLp0LL-I9uL9H=uHHH{=HH@HD$(dH+%(H8H==,1[]A\A]A^A_(hHS0H[JH=BBD@8{`.HBx H @ CaCaf.HD$HHHD$HhtLBH L5Mt+ff.fI~Ht LOt^MvPMuHÆ1ɾLHhL@HPLzHBHLD$ LD$IHZhHPLI?t,AFa<1LuLxfD=uuH=hԅAWIAVIAUMATMUպSHt$HHxXHH艫LHgH HSǃH9HH|$PH bgH SgHHBg Ј@tMuHHD$@LkpLchHC`HH[]A\A]A^A_D1 Xf.1H5}1H1QLxXZf.SHfzH@ HSHH&gHCHP[@HmHt)ff.DHP H@@HP8H@HuH`Htff.H@ HuHIHHt,ff.fHP@HPH@%uH@@H@HuH=1t=H51E1E11H=PLwHHt_Lff.@x6HP8Ht-HzHu&z$ uLBMt"I;Pt%ff.H@ HuHfI;uHHu;twz$HRHLBMtpIPAfD A @q$uyEpHHuu{f.IMo@AWI11AVAUATL%fUHLS@AHH5\ndղ=tH[]A\A]A^A_@tHHH5eH=LoHOHIHM!H!tjMteHL1HHtWLH9rO=tH5AI11L @@Ƈ,HχH~fHnflHH L5LlHI!HMHI)Ht`H)H֐P$tHHH0L9r?H9s:t HP@HI)׋H|HHI!ff.H@HuM9rXL==~tuH5N11AILܰL;-L5~JH= /ff.fAUATUSHdH%(HD$1=v9=ux0@OHD$dH+%(6H[]A\A]D-уH\$Hl$L%nEDfI<$H5O1҃Hك~vD$H9複1HJD$p|$u*AxH5~H=~1Hك.~D$HF/̈́8HD$dH+%(uH1[]A\A]H\$뉐Ht/SHfHn~dfl[HU@=}AUATUSHI"LcHf.H;HӟL-_8Ho@HIUHIEHh@L9uH!Lcff.H;HsL-,_8H@HIUHIEHh@I9u1/H-^8H˟@HHUHHEHX@H[]A\A]@AWAVAUIATE1UHSHHtD1ff.ff.@HŋU8!A HEHMHHuL=3^MOI}Ht?*IEpA}0HH@HD$IGHIEIOHAIEDaHAhIEAHA@HL$HA0Hi HA8HAHHAPHAXY(HA0HAHHAXHA`H:IL- I\$H2H*HH5ID$ ID$(HHILpHt&E1DIIrB43LYHtM|$0M$$MufDH]H3@<H= |@?tj@[td@*t^HHuHRH@8ruHsH@uHH8H ff.H1~HHt$gHmHYH[]A\A]A^A_f.ID$0fAD$ HQ*(}HQpHH@HD$IGHIOHAADaHAhHA@HzH8HuHHuH5+H= y1Ht$HH=z[]A\A]A^A_fAUATI(UHSHHL-Z؛@HIUHIEL`HhHX H[]A\A]H=xt@u ={xuH=x@5kxDH=Z@USHHH-WZB@ HHUHHEHXH[]ff.f.H?ufDUSH(HH-YҚ@HHUHHEHXH[]ff.ATL%YUHS8肚@HIT$HID$HhX[]A\ff.AVAUATIUS,HcI<$I\$HA@\tXeL5Y8I@HIVHIFLh@I9H;IH@\uI9LsMl$I^MefD ID$(QHD$(dH+%(eH8H[]A\A]A^A_1T$T$HHC@H5qHtH0HKHHtH H6D11H5A1xfHPHxHHzHHWHH@HnHPHBHfH99ptWHS8HtHtDH9t?HIT$HK(Ht'x HQ8HuHI(Hu@H sHIT$IHILAxB$wSH=oHzLhL92Hu(L9tLAyuG$HEHHuAHtrH{ IEu IH I9P8HuEHff.ff.LG I9P8H(HuH;BHxL@HLGMIxHE[HzfHnfHnfl@HBHHGLE1ɾH;BuHH|$ID$fHH t\HT$HH HL$HI\$(pHPHT$tfL5mH9 HzH9L@LHM>MHM%MAHzfHnfHnfl@HBHfH@Ls@LRff.fH9W8IH Hu$DHH~H@H@H@H@mAE$HL7fHlL9AHAE DT$D$E1E1#MnHL9AHAE thH9tLAyuG$tM"EU|D9W|LCAE$[HzfHnfHnfl@HBH;|$L&lMuMLMLHH@HHPHB#HLLLHH9W8H(HuEAH;BqADLD\$D\$I|$*L7kLE1M1HPHaH}H;Bt:DH SHD$(dH+%(usHD$(dH+%(urHH|$HID$Q;ff.H=ljt tDotHtHDH=BjfHHEATL%KUH S蒌H@IT$HID$Hh@Ho[]A\Hof.S HOK:H Sk@HHSHHPHCH@HPHKH9sHHH KH JH[HJqff.HJHjH9sHPH@HJHJP|qff.AWMAVI0AUMATAUSHHt$aH|$H> 1HHLp蠓DeHE]L} Lm(Ht7H=hHhtfDHH;uH+H[]A\A]A^A_DHgD HtaHgtHxtHHHtHxuxuxu1H5p^1H12HH;uyHagm@SH.fHn~1g Zk@flHg[fDSHfHn~f k@flHf[fDUHSHHH=gt&[#H=-UH-gHwgH[]H=hguH=Vguf.AT1L%DgUH-4gSH˩HxXHWgHbH5khHHǀHHGHH9HrfH5/HH5 HH2H=fH HHhp@`tm賮H޿E~fH|ffH5nfHt H¿IT[]HSfA\L`X.H޿G賋H4fz"nfAUH1H5:ATUSHH7fHh0vHHxHEnHHH=8fwu<_uHBHuHƫHx蝭IؾH IHH1芸HH݊1LHL-FI|H@HIUHIEL`GHx IؾH L HIH1 HE^HHINL+H讇1LH!L%EH݆H@HIT$HID$HhH[]A\A]<@HAWAVAAUME1ATIHUSHHHH|$AHt$0H|$(dH %(HL$8LE1蠓HcHEH@Hc+H5c͆1H= HHcHX葉HCxHcHHD$~T$(T$0)$DHCMtHxPtLfo $L;H@MtGMVH0EHLHCMtHxPuL`PfDǀHL$HH`MtLMEH迥H|$t, &f~a@HaD$HbHbHbHbHD$8dH+%(HH[]A\A]A^A_@HݿkHS~D$HD$B0HH H=@LHEuL@EuHӤIGMt Lkffo$ILX@HIff.AWAAVIAUAATIUHSH襩L0H@CELcMHtH5Hxu4CH߃ ЈCH[]A\A]A^A_:f.H5uH1tH5aHt1H5hݦHH1谨w蓣cLcJfDLئHx诨A$LHHH unLrHLFtQLDBA1vDILFLQEt0\u>QHDt A@AH{EuޢLcLDff.fUHSHpHAH^HhHX8HPh@`H[]AWAVAUATUSHHcH4$HT$HIH?tH{H-g?u\H5g1QH1'H<$H[]A\A]A^A_H1!LH1HHtH{L0tHHuH$H{XH{8XL{H3cML%{gHAGH{@HSLsHMuXM6MtHIoIvH蘨uAGA2F8u׺L1HHH1M6MuHHtH}bM?MQH$Lx8ML%ffHAGH{ HLs(MuXM6MtHIoIvHȧuAGA2F8u׺L1xHH1KM6MuHHtHaM?MQH$HL$LhHHX1A}JH $AHuaHt HHHuH $HH[]A\A]A^A_MHH$HH[LIHu3M6M$IoIvH褦 AGA2F8uL1PHH1#뱐L蘬IHuM6MIoIvH<AGA2F8uL1HH1軣뱋[[L-HLAWAVAUATUSHXdH<%(H|$HH=_HtUH`H5[H=ZH\.1'NHZHtfDH{THHu1VH`1H=ZZH]\Vى3^H^H^HtfHHHuHYH=YHpHn^Ht%|fHn~B^flH4^HE^Ht%|fHn~^flH^VH=^H=[H56c1H1 HZHttL%H-ML-A5)HsHt L1ˢHsH1轢HHt(HsL1觢H{辟~HXE1Hl$@L%HuG DH{0L P$H@@сEADщP$H[HHtbH{0H/HC8Hu|$@t1EQ|$@謞L{01H5JbIҞLLH1袠H[HHuEt`HH}YHuW|$@WH5Kb1H聞HH1THWHtH{8H[HHu H!YdL=WH[M2 ff.fAGa Mg0]H5[L۟AG`-[ HdAT$D@u E$EtDE1=\H=[HLH@H =r\ L@MHMCH=\L5VMXH,$ MvHMI~0H5IHtL`@LI~01MHLHIL9s+HL11HIHlL9rMvHAM$ MuH,$11H5@1pIH=[1LxHL`8HUHFhF`-=ZHH=Y@QH5UH=UH1҃'UD$@H?V(V[1^[8Yut'Y< fZ:D$@L%ZH=YHL褢D$@D$@vD$@H=XHLz蕀H=TsD-XD<n A tH=XHHGH=X@[iXt2L%XMt&HLu{YM$MuH5qTH=AL5L-M臀H=KTEH=?T1S葭H=TEL=SM~Hl$LHE0LMuNff.MMt7I`uE`HE0LHH@MMufHmHHuHl$;W<tBH=}WHHGH=iWH5l}Ht=UXP$,P$H=rTH=-WH5AIH'L%RMt6fIt$8HtIT$H="TMd$HMuӀ=X5XuiVH=S<DpH=SHuLuIl$(ff.@IL;-C_H,$UHGAD$ID$(x@uHGEt$lLHߺH@AAHAD$kuAD$IT$hLHH$L!H!H ID$hbH2H7OHFH@DhHFH1EHl$L5AHH $HHt$fLMHD$MM'A$t"LANu<_BHuL芈Hx aMH HD(H$HH|1ELH>DmH}LHD$AopH__stfDH>H蹄MMLHD$HHHl${L%AMu@H=EIt$11AHtHl@M$$Mu^1H=HxXI4 I|$M11Lacg@<"nH=DٓHHLdHDHHtVfDC$t:HK0HC@HL!t L!H9HS8HL!tL!H9DH[HuH@DeHE1H蒈IHDLM AE$t(%=tI}@tLIHLL(@MmMuIc H +LLE1kL|$HD$HD$H$L|$ Ll$(MHl$0LH]H2C$tG @HC@Ls8HH|$M|tH$L98HL$H9*L<$Lt$H\$IHM9uL|$ LLl$(H x+Hl$0L諃IHZ0HHHI HY0H9HL9uL|$E1Lt$Hl$LMM.L1IE@II]0 ?L$HHDH$MtA~uI9M9HIL9uL|$Hl$LjH>H^L5LL-HLl$@u_H $;HHHHIL6H;pHAPIEH$HAPHAPH9 :HyL% :HAHHHHH)H-9I9H=9Z9H9-9tH=M$L%9I$M3IH0L9L m9HMSHHHM"L11@Ht HxHtHH@PHt"HP0H9uHPHH_H@PHHuHKHHIDHHt(@a@uHP0HHHHH@HHuIXHHLIPHI@HL9IMRIH0L%8HH*M-ICHLHt 1LtMCHM@HHBHM9MI@0L%O8HHtICHLIXHH'IPHHu&ff.HZHHRHHt Hr0H9tLLHI9t>HH!HHHXHHHBHHJHH7H7<t AG$1YID$XH=+=E1BH"81H5@I}LH1M1LL$(H5DL\$ M}LD$}HHLL\$(H1ASLL$8LD$(HL$5XZH=8|L%6H8MSI|$8ͅID$8Md$HMuLxNHu6HHk6H-d6I9~I\$IqL-?65LyH 6HH=<dH 6L`0H51H5oEj|LHH1:~H5IH=H ~6H^a|HHH5M1I@0IHH;ATUHSH}HH.:IHu,@HHt H{HuI\$L[]A\H5E11{HH1V}I\$L[]A\fUHSHHD6Hu%DHHtH{H\uH[]Ð&}HHk}~5H5fHnflH[]fUSHHHHt+HHHHuHHHH[]DH(HH3HX HEH[]DSH11HH5H1H5H}HH8Ht.Hff.HHHuHHH[f.(aH=3HHx [H38f.SH 11HH5H1H5HHH7Ht.Hff.HHHuHHH[f.(H=z2HHx [H7f.?AWL=AVL5AUL- ATIUSHff.fLff.H<,tAW@ut_kLc@u(Al$I@t@,t @AG@tA$LHuu,7A,$@xH[]A\A]A^A_fL1AxHH1zÐAU1H5AATUSHHp2H{L% L- D tH[H{HLHk8H+k 1UH9H{(9HC(HtHx>fH*YHxNfH*^Lt@HfHH H*XYHyHƒfHH H*XH[]A\A]DAWIAVIAUMATUHSHHL'LL$ff.Mt It$HzLM$$uSL#Mu8xHT$HHhLxHH@0LpLh HP(H[]A\A]A^A_DHff.HE1HE11H=22fHE1E111H=2H=2@2AWAVAUATUSHL%2H2MtMHL52Ml$HZIT$E1E11LLM$$Hd2MuL-I2MqHMeHfH}LtyuE0HmHuMmMuE1@H-1HLkE1fH}L$yuLe HmHuL=1MHkE1ff.IHxuMo(M?MuH5}1HdC0t1HH{MMj1jj˧H @L5;1fv11HHHCHFHFF8HF԰H-0HuefDHmHtVHsH}*xu@u11HHHEHFHFF8HFjHmHu11H5ү1HHs10H[]A\A]A^A_f.ID$M$$HEMMl$HfHuLtwtHmHufHsHtKH50E1lE1%HH`@0HHuH5KRHL%/LL-/LH1ҾHj/YDHE1E111H=@/cUSHH(dH%(HD$1Ht.HD$dH+%(uGH(HE1E1[1H=.]AоHH 8HLtH"rffS?SHu#u11[H=H51qH[H1_sff.@H11QHHŵDIE1H11H=-3IE1H11H=-f.f.S?_HuH;_tH5+HSnu8C 8Cu/Ca()SMtLH=ڿ1~dHEHsH=Ŀ1cd= u HH=1:bHT$xdH+%(H[]A\A]A^@HCa t ="#@CaHC0IE3HC0*HXHt~HD$0H@IWcD<HC(H@L@RfH5,1=`H1Cc_HH=1cf.HHH=H1bIH8 `I>I_AD,D=uWca1@H53H$]I|$(11HuAbHHUHH=n+1_`DHC(Lcs_H=SHtJdHHt"ff.HH!dHu跧H=Ht =u[[ ef.=AVIAUATIUSHT$0HL$81IHLH=L]`xPHu31H5+L^LLH1`Mf.H[(CPv<w\H[H5*1]LHH1_Hu|H=9[1]A\A]A^_f[]A\A]A^<Ls(HI9tuM1H[H5*]MLLHH1Q_HtHH=1;_nfD1H5)=]HTDMmPH2H=ּOf:tfDAWIAVAUIATIUSH$hHHxu2H[]A\A]A^A_H5I*1\LH1^H^IOLLHHD$fHHxiHD$L4HL9r39fDHEHtHHtIwHxz`tVHL9sH+HuH|$H[]A\A]A^A_XD1H5)\LH1]rI_H5e1[HMLLIIH=1]ADAWAVAAUIATMULSHH=uV=uH[]A\A]A^A_fD1ILDHE{uCLk(H[]A\A]A^A_L~1H5([HL1\f.=/AUHATUSHӉʍIHHnv@ tV~H=]i]H5(1ZHHHH[1]A\A]L\@Hp(HvLuYLh0M9H5#)MuGH5_)DH@(L}H=\MZH5'1YLHHHH1[]A\A][ucH5N( fusMtܺH5'M9Mt6H5(jH=LD$ \LD$M|H5(H=˸[wfH=[@f.Mt+1H5(XHLHf.H5(H=RLD$Y[LD$7ff.@AWAAVAUMATIUHSHH(=dL4%(Lt$M=u(HD$dH+%(H([]A\A]A^A_DH{PbrXHHE@D$ Ht$ HD$ EH__CTOR_LHH_LIST__HHH{(AZHH{uCHk(MLLbHN1f1H5$=WLH1YH__DTOR_LH_LIST__HHHaHt$ H(<tbHYWH1H5*'VH1XfD1H5 VH1kXVUHSHyXHHXH=HHCtHHHH[]ÐHHH[]ff.SHH=HtHZHtE[(W=H5HHCFYt2H=3f1H5(U[H1bWf1H5Z(mUH1CW믐UHSHHHHHt'H%ZHtHH[]f(&W=H5HCHHXt5H{H1H5'THH[1]VD1H5'TH1V묐AWMAVIAUATIUHSHHXHHdL,%(Ll$HEHt511LYHt'HD$HdH+%(HX[]A\A]A^A_@={H-HtHHOE$u ЩuH= HWHHHCHHEHC@HE1NSHK8HE HS(HHH#EHP3Ls(H I9t3H=NAF$u ЩH=N LWIHHC0AD$ID$MLk ID$(H HPz  I9tgH=NC===HIt$(LH@P8Hk HH9tH=ME$u ЩH=OHVHHcoCEEHC(HPHHU(E @H It$(LH@PPID$Al$  SjLHQHJIH@HS EH5nH9Hr`HJXHHHp@=tID$(D(6fDHIt$(LH@Ph1H5JMIH1#KfD1H5"%IH1J{fD1H5HH1JTfDH:EHE(E 1H5HH1JLHMNH%RIH+&HD$dH+%(u =HtPffuHH9P(uHx0[ff.fAUATUH-SHHHt&S w HcDH>H=&AAfNWH[]A\A]@Hs>. 1 H{ H5HmH=HH H9L HCHHHC HH[]A\A]fH{=H{  ;3H-a L%d=`L-KM9t7MMIE0L-QHL-Il$0JA e =&H HcH>DH{L%=L%UHC H=HDC(HH!fH{==(G ~!8-%H'f.f =T =, --'HHcH>H{'=kH=]Hs H=WH1[]A\A]=j!HCHP`H@XHC {H\HYHZD{H%=>H=(Lk1ɺH=L@IHM uu~@wAL$!@fH AT$ IL$ }DHu(HE0H5Hu)}3HSdHuHN'HH=[]A\A]=DC@HsH=1ɺAc=HHLc1H59HL1;fDstHH95^'H{116HHp8H";E5N|Hff.f5H)5H{115HkH@8HHHeHSH=Y1E1AH561HtpVw@efuH V)W, 1H=H5HGH=1<1҉H{1" H H@(H{1 H HH@ H+B0HHHB k4H{11&4H Hx`H=WHBHt H@0H"HSH1Ht 1H=HHH1H -HsH1H;-HPH1H9-Hy-Hy1H9-`HV 1H9-HLH;-9H-,H9- H D%xH AEhH!H9Tz@ƃ-H)HH HrHZHHH!HH)Hs'fD@HH9rH55H=NHHL=1HHHH)Ћ CHiV@uHUH!HH?HfHnfHnE1flH-HL-=@H yHH1-JL9-SH=1H9-$HH1H;-HH Ho HHHHL9-H+-L9-H-_eH-H-L9-H-5;H!-pL9-y"H WHHHHH?gf=HkH5$Hb4H[H=HS:.1z'HHH+B0HH\H)LgHuZfDHHtLH{L3u{=H HkHtH1HHCH]7H+h0H$H- H HHBHHH9 SID$H=`AE1H5,HH@PTtW=CJLcH51R.LHH1"0H=HH=HDHHH[H<2HE<HH9E(11H=`H2H@ 8Kf.=uxcH5lH HvHL1HHH)Hx.RH+H0H?H (H%L%!E1 1H=HH11Hv>ff.ff.H HHHuHHEHH9Hy-H5-1y,LH1L.HkH5RH0lH>H1H5<,LH1- HkH5 1+HHHH[1]A\A]-HHH9HH=~vH H9=H H-vH,Hi0L%L9sH H9H-fH*HgH hH9pHH9`H=H{ L==Hu(H~`H=AT$ H9I|$H=mH tLLfHH=H AăHAPD  |dH - L9-D E1H5)H1+HU(HB`HdH H9pHRXHU0HHHQ=\'HkH5Ft=:u'HkH5(1Q)HHH1!+f6H)1H} EH}(H=sH;o0H9,@H5,hHH9XHS zFzHuk:ucHJyuYHQzuO:uGHr~u=>u5Hv>.u,~u&HR zuHzuHQ(zu Hz.H$ "Hs11H=,H~@!t 8H d=H[ H51'HH1)P1=TH[ H5D륃=5HE0E1QL:H+H4HHH96]H=H^HHE^@+1҉HHHH9H@8H 1H H@8HH9H5H5+1t&A[HLHH1[]A\A]9(Hh0H9aHBXfHE00H)It$H'H9HHoLcH5`H HȄt H9H=k=)3HEHX:+Hl"HJy9HI9.yHz HS UH9HT>H)H!HHwH-a@dHH8IID$HnzUH(SHH[HkHC5HC CHCH[]ÐATI(UHSHH LcHCHk CHC[]A\fDATI(UHSrH躓C HCLcCHHk []A\fDHGH{HlH5uHeH;H8H9lff.ATA(UHSHH1HSD HPS@{PHXHh t H[]A\f}uA$vAtH HHD$cHHH =eHD$tH?H@ HP@nfAUA0ATIUHSHHLHSD(HPS@{PHh HXL`(tH[]A\A]}uA|$uH HHD$HHH =HD$tH]H@ HP@uU(SHHwHS(HPS@{PHXtH[]߁Dtt݁(tH HHD$HHH =HD$tHH@ HP@jATA UHSD HmHkHCGCCH[]A\ff.fATI0USHVHS=HPS@PHX L`@h([]A\f.UH0SHHHS=HPS@PHX Hh@(H[]ATI0USHHS=HPS@PHX L`@h([]A\f.UHSH(HfHS!HPS@PHXHh H[]ff.UH-zSHHH=t"HI{ vCHcDH>HHZH=QHK1Hr)H{ H5*H)[] fHsHH=y1[]X!H H=\)H{*HK HLH=H1[](fDHCHHt1H= HCHS H0H1[H=΀] ;3ltd1nH5/ H5(H{cH H=l(H{ DH{/H5?H{ H5:H[(;1H{H H='H{0fD;1HKHt:HofDH{H5%;LH[ wH[]HH=~[]fH5(H{;fDH{H5H[]*f.13H pH=~&H{ H JH=~HH=z~1[]|ff.ATIUSHtTHiHHHMH2H/j=HuHt =u L[]A\@H5|1HHH1LHHHIHt%H1HvH9sHuHøATIUSHHuH HHEHBHCv=t=H=Ht <HHud HʉP[]A\Ht,=t#H5^1HHH1L[]A\HhHH}H=y1H(L@ff.ff.ff.ff.@HrЃ7 GHuAIPH4I1DATUSHtQHHIHHH=u"Mt =u<@Hc[]A\HHzHtHB0[]A\HfD1H5eLHH15H (H57H=tHf1H5 HH1ff.@1H5#H=lWt1SHH9_(t 1[fDGtHw11H=yHtH9X[ff.H=f.fDH`fH`fH`fH HH@ Ht f.ff.@H`(fH}`0fHm`8fH]`@fHM`XfH=`HfH-`xfHHHt ff.@HHHt ff.@H``fHHHt 1ff.fH}HHt 1ff.fHMHHt ff.@HHHt 1ff.fHHHt 1ff.fHHHt 1ff.fHHHt 1ff.fH]`PfHH=xHu H8H@pHHdH<%(H|$H=Ht5|u6@u6t5H=dtbH=bt@HD$dH+%(u]H@t1HH$8t5H=:H=IdH H=1\Hff.H5HR R tFtEst6t5u-HHu@HRHHtHJ0HtHQz t߈xfDff.ff.1LD5<uDcH<uDH=QH5uDH=5Hv5hHGHff.HH5u1U1HH1UDHH5u1%1HH1%DH=tBUHSHH H sHHHHxh H;uH[]ff.@ATIUS?gHH-Hu7H]HHt#HshLuH[]A\H5 1=LH1H5t1H1H=|[H=n]1A\DlJd@I7AUATIUSHHȬHtc1H-L-mtHt$HKhLL1pLH]HHuŅtH[]A\A]fDH541=HL[H]1A\A]HHHt 1ff.fHHHt Hff.HmHHt ff.@H=HHt f.H HHt ff.@HHHt ff.@HHHt K1f.UH5rS1HH=ZH lH1uuSH[]1H5mH11H5KH1tH5r1$H1HH{HH-qHPhH1HyHHuH[]f.f.fDH=[1LHjyfH5- ff.ATAUHSHtPHH5[17 HDHH1H5q1 H11H57 DHH1AWAVAUIHATUSHHxdL<%(L$hAτt =2eHL$`H$8HHH@@H9uEML1Dʄt=%ff.ff.PH%u%taHHgH/ALFIHHH9uEME>A%$D$E1Lff.@Iff.fLAFI<%tuI9LHپH) E<%LDA/KHFEPEDN L A/ EHDNLQA/' ALDHHA D/ALFAMAFInMn<0wH5MDNt A~$LmfD<%tE[|$} H$hdH+%( Hx[]A\A]A^A_LFI@HF&LFI@HF&HFIHHFMLIHHFMLAL@LF@PLP0DH-DDABD]t x$IB=C5LfIcL>MduxHmH1E<%ALX=o|$P @AFWIn9IH޿% AEHAR'PED$LP $A, $D$HRHH|hLt`HDpH<$HD$M?LTIIFjLHT$,RHL$HT$LL$@LD$8@D$ ZYHD$0HHtUCHLH5jH1W HL$(HCHRiH1sHT$0EHtARDZALIBARDZA@L1IBkD$ME1E5=(/HRHhHL`HRH|HL`H1ALmEHRLmHD`HHHHtUSUuHH LPaHgH1HL$H$H1H5g0K1H5]hLH1;:}GHT$0uHtH5gH1HRHgHL`HRHgHL`HRHLmLt`I>>IHHGL HHHgH1 EH$hdH+%('HtaH=fHRLmHL`H9=H=HκH $S H $HIHHhLEHHtH=t L9H5 f1HL$HL$LHH1kH=tL5}xH|$(HXHt HGH=HKH|$0H2D$HRLmHD`HP0HtHHt BIOHxHxE/HRLmHD`HHHt BI0H8H8EHRHLmHD`HpHHHLF H5/eHHP1[EH5$e1HH1m EHHEpHFH$hdH+%(H%_H=FdD@HdH1  pHD$4HD$0 L@H HFdH1 H LH_HF H$hdH+%(u0fDH HcH] jH=Ht$(HAHA8YHt'u+HD$0H=HHD$JHL$%HL$0ff.HHt$(HT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1HH$1H=HD$HHD$ HD$$D$0wHD$dH+%(uHjf.SHHHt$(HT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH<%(H|$H=XHHH=H$$HD$HD$ D$0HD$H=ϲZHD$dH+%(u H[|ff.UH5aSH1HHHH[1]fHHt$(HT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H=1tEH$?%$HD$HD$ D$0HD$u!t6HH=H1bHD$dH+%(HfDuĿ HH‹$/wNHt$ǍHH<>Hz/weH HJ/wNHHHBHδHHĴuHD$H0HHHD$HrHIHJHD$HD$HHH HD$HJHHT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$1HHD$HD$ HD$$D$0HD$dH+%(uHfU1H5J_1SHdH%(H$1HHHuD$%=@@HH$dH+%(u HĨ[]Off.@AVAUIH5wHATIUSHHt~E1H=+t1LYHHHHc9}H8/thHpEu=߸t H5r^1LH1H[]A\A]A^=tH5^fH=HA{ATIUHSLE1HZHCH5]HHtH5]HuAHʹLcHt!fHH@HuHZ[]A\H[]A\@HIff.USHHgHt7f.HH[H}HF H}HHuH[]ff.AWH5FAVAUATUSHI1MI:HI5L}HLL)H9u>|+ t7HHHHIMLLI)D)HHuL9t[ HHt#HHtH@H< wEIrHu?LHHLH[]A\A]A^A_@H<=t< < < Hrff.H< wUIrHu(HH=1gjfBHt<=t < wIs>AfH<=u< sBHt<=KtVff.HAUATUHSHHHuDH[HtwH;1HZu= tJL#H5OLkLwHtKMH5%1LLHH1HCH[]A\A]@HH[]A\A]Mt#1H5D?LHH1?11H51ZHH11H5LHH1wf.H=ܵAVH5Y1AUATUSH1HHt]L%YL-Y0DH+L1vLHH1vH[HtLsMu̺L1EI[]A\A]A^ff.@ATAUHS@u =u] HHD`H=H6H}=tMH5EPHQuH=Hu1 HC[]A\fHHC[]A\H=Hu11HC[]A\ff.AWAVAUATIUSHHHdL4%(Lt$AHu0Hs LT,HHtEuߋCuHHuL(HxHHULHH۳DsH{ HHijAL=MsHL8Ll$L5LfM?M$I1LL1LHHcHH(HtHHL轛T$LH]^H-HD$dH+%(H[]A\A]A^A_fH51HHD$dH+%(HL1[]A\A]A^A_fDLl$LLHHGH}HtIHэHL=GMfDHHhH5SH=L-H-LH'HIHtVHttBHQHLH;H/L=ȱL;AMOHH=LHHIHtHuHUH5HgH=߯HHIHt)HTHHi{HXff.@AWAVAUATUHSHHHvX=BHC0Ht0H5HUHt H5WU1HH1H{0H>{aGJODGJGJC`$< u*Ԭt =JH[]A\A]A^A_þVLc0MtL8L9c0uC`t uHu1HE1;]s&DAw H=VB+=.=uH=WjHH{0SaGJODGJC`$< C` uHS0BD@"H5īLHID$xuHH@x=H{0 HC0D1H[]A\A]A^A_L1I\fDH{0Hr5 DCuH[XH5>1WHH1*1uH5l1-HH1H{0GHC01:DA,}@(o@=L5}X@,E1E1)LxLpLh.\H=p+HEoLc1H5PKHHL1PH{0((tWLuMIEH|$GH|$HA *e?=D$tLD$MLIEL=V1?,u '?=tLD$TLLD$L%>fAWIAVAUIATUHSHF`HT$u.H~t ?/HHE8/H۫L%2EHu=f1L1DHILLHHE` t%tHHLuME`HUH{<uHHL1jHT$MMHIXZL0zLuH[]A\A]A^A_H1[]A\A]A^A_HH=u11lHHHtH]HAUATUSHHdH%(HD$81H0t#HD$8dH+%(eHH[]A\A]@HG`H(Ht:HS1H5C1HHH@t c`HkfHH-QHL%XL-#O%H}Hu#HmHH}LLHt̀c`)@HHHsH{HkLc1H5?NHHL1l}LcC`t>H-ϧHt2A<$/u+1H5(NPHLH1 H-aHHN=dHl$HD$Ld$ HD$(4HD$ HT$HE1PE1H IHD$PaHXZH3L%H501HL1|HH-L%WL-`HunHmHt]H}LLHtH{Lc1H5H.HHLH1H{0BHC0Ka @?f.1H5LHH1fDH51HLHLH1~H-ǣfHk1H59LyHH1L1H5LTLH1'}ff.f1DffUHSHNHH-7HH@t*H tff.fDHSuHHHHفH[]fUSHHHt'P >HPH@ H7HH[]Ðt-H[]H51HHH[1]f.SHHHt'HwHtH:f@H[@H߾(HT$HT$HHu1DUHSHHHtKH=jJ8HsH=sHCHt"HEHHHEH[]HCHCff.AVAUIHATAUHSHH0dL4%(Lt$(MtSHHH5HL,$HD$Dd$ Hl$Lt$HD$(dH+%(u4H0[]A\A]A^D1H5juHH1HAWAVAUATUSHLo0MLiMM'Mu#ff.fMgIMAD$putIT$ HR`HtHD$H*HHtff.fLsMuED{u:M6Mt2I~HuIT$ H|$1IL[{tDHHuMgIMHH[]A\A]A^A_ID$HD$`1H5 LH1@AWI11AVAAUATUSHHwH=N1HH@<HE(H@`HL-L0MtfDMeMueDA}uYM$$MtPI|$LuI_ HtfDHKHU(MH}'HHuA}tMmMuH[]A\A]A^A_I_1H5ɾHH1ff.fAWAVAUATIUHSH8HF`H<$HHBH@`HL(LtPID$LpMu @M6Mt5IvHuI$H<$HEt$ HD$IHxu4H8[]A\A]A^A_@H51H4$H1LIL$H<$HHI0HH'MMM9sfHl$(L|$MH\$LLl$ Eff.L3Mt1IHt HHtEu;f@t HH I9L$t>HL9rL|$H8L[]A\A]A^A_,@HH HUH9tA%tzHt$HHhHXu@1MvHH5HILt$(LD$(H1HT$8Ht$XZL9#WfD@u=H591HD$H4$H1wHL$D@HhUD=HHt HrHxHrHxs=AVL5AUIATUHSH1ɺHLIHI\$ Huf.HHH9kuHϏI9tRAE%uK[]A\A]A^fDK[]A\A]A^(H5L|YK[]A\A]A^1H5һMH1#EfDL;HHtEID$ HI\$ cHk;f1H5:H1b1H5BH1ff.@D EjAUATUSH+HH-RLHH1LD1O$fI2HLǐHF HtHJHHHIHuDH6I8H^HɃt"H1[]A\A]H5/Hfn*fn E1H-DHH=fbHۜL,H= f0LPHHHEJ HtjLHHIHA Ht5ff.ff.@oHHSHPHHuH HuID;%xH5%H=nH=H H[]A\A]fDIM9P]H=VHLH-LHiHHUHHJHvH H5HH5HHHى5VH/H5XHI?HH5E1N$Mtrff.fZHLoHFHID$ Ht5ff.ff.oHCHPHSHHuM$$MuID;-HEkHHHHE1H=1rCDAWH5 ?AVAUATUSH(dH%(H\$H1H1HH5>1HHHHŃ1H޿ 2u1H5>HHH1&=HH<%H5~HT$H=IHD$uHD$H5YL)HH9H bL%H.L-1IHD$I9MDM&H=11AIt$Hxo=2IL$H1H37I|$mDxIl$ Huf.HmHtwEtA1"ff.H޿ A/A2uHULH1E1HmHt,EuHmHtEuHmHuff.Il$ HuHmHtwEtA1"ff.H޿ AA2uHULH1HmHE1EuHmHtEuHmHuf.Il$ HuHmHtwEuA1"ff.H޿ AA2uHULH1hHmHtEE1EtHmHt3EtHmHuff.EtH=l;:HD$II9HD$dH+%(TH([]A\A]A^A_DIL$H1H0I|$;DxfH@(Hx`tHHv@D@lID$ Hu-bff.ff.fDHH:HPBD@u&DIl$ HE1Il$1H5?bHH15H=A:H5ZH5y:1 HHD$dH+%(uH(H߾1[]A\A]A^A_+ff.=MufHH=U1H57H=PHf.f.ff.AUATUHSHHHHL`LiHHt!LHHH[]A\A]1H5űADH1fDAWAVIATIUHSHHD|$@HtN~HuHF(HthEFtb=u-I~8LL$L$HtwHs11L$LL$Ht\HHLHD|$@LH@PH[]A\A^A_fHI9t A t3xteED@uAL$HnH[]A\A^A_fDAIH I9A@%tTxED@u*fA|$ED@uAL$AL$HAL$DAFuHUzPJHP(HRHHBF@HP(HQFHP(Ht BF3Hh(*HP(HRHHBF@HP(HP(HHw ff.UHSHHH=t&HE(oE8Hk H1CH[]fH=6?ff.fHSHHt HX@1[@H=6HhHX@1[HUSHHt HX81[@H=R6H(HX81[HSHHt HX01[@H=6HHX01[HՒSHHt HX(1[@H=5?HHX(1[H=SHtH1H1[H=5ff.fH=DSHt&HV11H*Ht%Ha1[DH=*5D[fH=SHt.H1ҾHǵHt*Ha1[f.H=4/D[ÐAWAVAUIATUSHHH=pHo@Lw8t~LcMt H9kLHkDC0HLs 1H=dI)HI׺MH;IHC4MLcMe1H[]A\A]A^A_fD*H=3gL{@L9dLc(1H5XsLHL1C8fDL9s ;@C4{01LwHxTH;H7IHtAIf.IH)H:{0HLH#38tԸ@AWIAVAUAATUSH8H=L7IcH+HHHIHDHD$EHt$ Dl$,MMIELIVI>I$HL(Ht1H5LC1HH}HEA~AFHcH>@H~AHE IED}xHD$II0I9gMHt$ Dl$,DLH81[]A\A]A^A_fDH}E1@Iv AHtX1H=11LHHD$Ht$HHD$HHD$A@Iv AHuH5ALDIFAHEH{fDHEHt HPzt]HmH5ݩ1HH11A~uELHE0ANwXH=*EIDHu@"L;H_H8[]A\A]A^A_fDH5l1L$!t$H1@H=Z0KfUHSHHT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$$HD$HD$ D$0HD$ulH5/191HBHH1H=yHHH9HHD$dH+%(H1[]Ð1H5a/HH=*HH&H BHDE11H=JyHHHH=}諻H=}oH7afH= yHH1|H5x {5qAWAVAUATUSHhdH%(HD$X1GFtGJHAAtB@u<t8<PHIHT$XdH+%(Hh[]A\A]A^A_fDH{L3H|H5+.LAHE- 11HHHHHDHEu=HHHHHHEHH@G H5=HH*HHIHqHD$0HHHD$$H3H9t$0vHLd$PHfoD$@I,$HAD$4HEAD$8ID$ID$D$8ID$ID$ AD$0L5D$,E1ID$(MHD$,HD$AHt$H|$AAAH>t IFH'M6MtgL$,u_IF(HtMN0L5 MuHt$H|$DD$DD$fDA|$4KJH1fL5Mt*H5@1DD$\LH1/DD$At$0t)T$,I|$DD$uDD$AD$0D$,cASJHE HkPD) ЈCJSIEI ЈEIH5$11H1@H{DD$DD$fAt$0X6f.+1H5AEDH1bHH3HD$0uID$ I|$It$HH=pHH)eT+ff.AWAVAUATUSHcHH=L'~%)L$L~5)dH%(HD$xHI*fHnHE*fl~-()d$0fHnH:*fHnHflfl)l$ ~=()t$fHnfl)<$MH[IHHfDI0I9I7H=y11ARHAGPH1H=[t"HLH= H1H9!DmAE<AE<HE(AuH@HAGH5 <H9t4I9Ht&RDu1@ff.=AG(fo $foD$H= 'AoL4)D$P)L$`LlPfoT$0fo\$ HAoHD$p)T$P)\$`-HLPI/1HL$@H5I0HL$@MMHHL1NI9ZHD$xdH+%(HĈ[]A\A]A^A_IH=~E11AH5l~7HtH9ŹHZHAG<3<~D<<fDH9I9!Hx1BFgH5R'1mA@H-NHH1lH@1H5r-L-VA@HL1,*H9H51L$@Lp޿AHL1DmL$@5<HD$xdH+%(HM&H=%$@UuwtrDH|tCu uHuH=}]H|x@tOAED$L@fD1BH=;%HT$@HT$@Ei Hff.H1HH 1HH=SHts0tH{C01[fH=$ff.fH=HtH5$1DAUATIPUSHHοfLHL`@@ @0@@SHEHHtQHEff.HHt8H;CuH5Z$1OLH1"HH[]A\A]HYH-rH-YH(HH-UH[]A\A]f1H5ILLH1赾JH=Sta?-Hu#{-HtH{ H5#*t2蜾HHXHHHHH@ 1[úH5L#1M[H}ff.@H}H AW1AVAUATUSHff.ff.fDHH HH9BHuzH-HLuHL-HʽHL`EAD$#wIcDL>3H=!Off.@HII9uL5~L H-|"MDI~HDIHIVLHt&ff.HJHHHHHuH@L5~AH~AŅ.M6MzxH=|}H xoH}f w)}o@)}o@ )}o@0)}o@@)!}o@P)%}o@`))}o@p)-}o).}HH0}H H|H|HdwjHHQ|H[]A\A]A^A_HI$RH;I$BH[I$2A$%H.I$HUI$H^I$HI$HI$HNI$H~I$H~I$H>I$HI$HI$uH>I$ev1҃<tt 1<ƒA$9A$,@M~1H5聸DHL1Q@I~H5hIH$'1H5IIFHD$(Ht$LH1USHHt7H=O輺H{0HtH{0HHoPtKa Hk0H[]fSHz]yHt<HC8Ht#HzHzt HCHzHHuH}z[Hff.AUATUSHHszHtvL%ߗDH{/HHtWHC@Ht{HuCHHzHzŅtLkL1跶HL1踷fDH[]A\A]DUH5^SHH袺t4H5EH菺t!H57H|t0t@H[]ÐCx@UH5SHH2H5HtqH5H߽tY;0uR{xuLCHS1H5BJDNtHHt DNu<-t<:u HfD1HH[]ff.AVAUIATIUHH5SHHHdL4%(L$EN&H5H7H5H }0}xEHUE1H5A<-t<:cH NtzD~t7J LJzH<~@@ǀ7 ILʈDH蠣H5iHLAԄu\1H$dH+%(Hİ[]A\A]A^H踖H5HLAԄtHH)fHH蕷0^06WW1H=?»Ņ,HIc։H聵A9 a_p=qH}s=xqH_H5$pHHH!H9\H@H@H!H9IIIM!H+xM9IISHM!HI9HHH9H@H9HrWM9tjHzM9t^HtR2ofH@HHH-2ounH~~HWHE[ÐHRo=pHjHHEfDioHH0HEfDIoHHV[HDD)oHRHk [HDoHH,[HDHs n[ff.SHH51襰H߾H1胻1H5%耰H߾H1^1H5@[H߾H191H5k6H߾H11H5֤H߾H11H5H߾H1ʺ1H5ǯH߾H1襺1H57袯H߾H1耺1H5Z}H߾H1[1H5XH߾H161H53H߾H11H5H߾H11H5.H߾H1ǹ1H5YĮH߾H1袹1H5蟮H߾H1}1H5צzH߾H1X1H5*UH߾H13H510H߾H1H51 H߾[H1UHHSHH HHH^H[]fAUIATIUHcSHuHcHHHI}衮 HIE( T(I<$}H5I$H HHyHHHHH)H)΁HH[]A\A]ff.fH5upH=NjifH5EpH=Fp1L A@1ɺyfL }A@1ɺYfHH=Qog e HH@ H#~i iH jjH_iHf.HH=iH5:ix@H@1H5ʥ轫HH1鏭ff.@USHdH%(HD$1~" Ht HcH>fRz}P{H5[H=vnHT$dH+%(H[]Á-./ &hH=[LH=[H5Éiu,u(H51腪H1[YiDWH0[1H5ʤMHH1 +H5[H=m%kgH 1hf%?f fTgDEg9g .g@%g@H=ZTfH-jZH5Hf貭jH5 H蛭@fEDH=qH ZHjqHIH5HJfHhH9q@H=!q輥H=YH qH?#Hp l1f%e@HYYH5H説tvH5H藬e?@e7=mau k1f%ne@ [efKe?Ȁ?eHHXDH5Hu: e@fH5H`dkH5HH5Hۤ H5wH迤?H50HH_dSd1H5HH1踨1HH{襰H$Hd:u HPHt+HuWH5n1HX莦HH1a ce1HH{GH$Hd:u HPHt+HWH581HX0HH1 ucH5\H8OcCc1HH{ 躯H$H/c:u#HxH=cH cHpV1H5HX 艥HH1\H5 H蛩u bK薥H5 Hwu %b'H5 HXuH 9cH5 Ht'cH5_ HtE1DcH5M Ht"H5Q Hިu.E1DbH5l H輨u.+clH5H蝨u.bJH5) H{u.b+H5 H\u/Rb H5H:u/H bH5RHu/bH5 Hu2H a 1H5)褣HH1wH5{ H賧uH a_H5b H萧u H ta?H5K HpuH QaH55 HMu H 1aH5 H-u H a@H5 H uH `H5Huo`f`H5 H軦uo`fw`[H5 H茦uoh`fXY`,H5l H]u H I` H5J H=u H%)`H55 Hu 7_H5 Hu %_H5 Hߥu_H5 H轥u ^@mH5 H螥u %^NH5 Hu ^/H5 H`u %y^H5HAuX^L^H5\ Hu-^!^H5=Hu^]H5 Hu %]pH5 H衤tH5 H莤uE1D @^;H5 Hlu2^H5 HJuE1D^H5 H(u]H5 Hu 1=]H5 Hu c H5{ H"u*Hk H5n H諣u2%bbgTH5o H腣u2 b5H55 Hfu6 b@bH51 H@  qbH5HxH5H\uT1HH{蚨8bH$8t+HtOH51HX荞HH1` a@d1H5aHH14?1HH{!aH$8t+HNH51HXHH1%paH5Hu Qa H5HXu$H H5Hu,15aH5Hu. `qH5H袡u1` OH5H耡u1`-H5NH^uJ` H5dH藚H5VH u1 U`1H5B͜HH1蠞H5H7HH5rH輠ud1ɉ _kH{H JHH$8uCv'H-MH51fRz}P{H5mCH=&VHT$dH+%(H[]Á-./ OH=C̘H=CH5/É QAu,u(H541H1ۓPDWHBH5L1͑HH1蠓+H5BH=BUNH Of%?f fNDNN N@%N@H= BԬuNH-AH5H[N2jH5fH@.NEDH=Y蔍HAHXHIH5HʔfHHX@H=XH51HXHH1 SKe1HH{ǗH$HL:u HPHt+H>H51HX谍HH1胏 JH5H踑JJ1HH{ :H$HJ:u#HxH=JHJH=1H52HX HH1܎H5MHu 8JKH5'Hu %J'H5HؐuH JH5HtJH5HtE1DJH5Ht H5H^u,1=VJH5H>u.JnH57Hu.JLH5Hu.lJ-H5oHޏu/I H5!H輏u/H IH5ԆH蜏u/IH58HzuH ^I H5TH5HIuH *IuH5H&u H IUH5HuH H2H5Hu H HH5HÎu H H@H5H裎uH HH5H耎uo\Hf,MHH5RHQuo-Hf HqH5(H"uoGfGBH5Hu H G"H5HӍu H%GH5H賍u FH5H蔍u %FH5Huu?GH5HSu kF@H5bH4u %LFdH5MHu .FEH5,Hu %F&H5;H׌uEEH5H謌uEEH5H职uEEH5HVu %oEH5H7tH5H$u 15ESH5|HuE1H5XHu 1ɉ EH5SH‹uxEH5/H蠋u 1҉XEH5(H耋u J H5H輄u*Hk H5HEu2%JJgnH5 Hu2 JOH5Hu6 eJ@rJ)H5Hڊ ;JH5Ht}H5|HuT1HH{8JH$8t+H7H5K1HX+HH1 I@H5N-1HH{ӏIH$8t+H6H51HXƅHH1虇%RIH5HΉu 3I H5H u$H H5IH蓉u,1HH5zHsu. HH58HTu1H H5OH2u1H_H5HuFzH=H5HItOH5JHֈu AH5H5H覈uc%AH{H 5HH$8uCv'H- 5H5Ӏ1'HH1GH5*f.@/A=pBH s=HBH _H5@HHH!H9\H@H@H!H9IIIM!Hf M9IISHM!H I9HX HH9H@H9Hr8 M9tjHY M9t^Hj| tR@fH@HHH ?u?HM H( HE[ÐH)C j@=@H HK HEfD9@HB H HEfD@Hr H7 [HDD?H H [HD?HG Hp [HDH ?[ff.SHH5t1uH߾H1S1H5tPH߾H1.1H5u+H߾H1 1H5;uH߾H11H5uH߾H1迋1H5v輀H߾H1蚋1H5,v藀H߾H1u1H5OvrH߾H1P1H5zvMH߾H1+H5v1(H߾H1H5v1H߾H1H5=y1H߾H1輊H5Xy1H߾[H1閊fDUHHSHHHHH}H[]fAUIATIUHcSHuHcHHHI}QHIE(T(I<$-H5fI$H HSHyHHHHH)H)΁HH[]A\A]ff.fH5BH=;~fH5UBH=VB1L ]xA 1ɺ)fL -xA 1ɺ fHH=Ag耘 97 HH@ H#.; /;H _<o<H;Hf.HH=A;H5:蕀x@H@P1H5zwm}HH1?ff.@USHdH%(HD$1~" HHcH>fRz}P{H5-H=@HT$dH+%(H[]Á-./ 9H=A-H=5-H5_É:;qyu,u(H5dv15|H1 ~ ;DWH,H5|v1{HH1}+H5,H=?9H 9f%?f f9D88 8@%8@H=9,8H-,H5IH8bjH5HK@^8EDH=1CwH+HCHIH5H~fH}HB@H=BlwH=e+HBH?|HB *>1f%7@H +H5HZ~tvH5/HG~Z7?@N77=3u =1f%7@  7f6?Ȁ6HgHR*DH5H}u: 6@fH5THq}`6kH5>HvH51Hv H5'Hov?H5H|661H5JsxHH1hz1HH{UH$H6:u HPHt+H%)H5s1HX>xHH1z 5e1HH{H$HL6:u HPHt+H(H5r1HXwHH1y %5H5 H{441HH{ jH$H4:u#HxH=4H4H (1H5brHX 9wHH1 yH5}HK{u h4KFwH5WH'{u %D4'H5HH{uH 4H53Ht4H5HtE1D4H5Ht H5Hzu,1=4H5Hnzu.4nH5gqHOzu.E4LH5H-zu.4-H5Hzu/4 H5QHyu/H 3H5qHyu/3H5hHyuH 3 H5pTH5AHyyuH Z3uH5(HVyu H :3UH5H6yuH 32H5Hyu H 2H5Hxu H 2@H5HxuH 2H5¯Hxuo2f\}2H5Hxuo]2f=N2qH5XHRxuo.2f2BH52H#xu H 2"H5Hxu H%1H5Hwu 0H5Hwu %0H5Hwuo1H5Hwu 0@H5Hdwu %|0dH5}HEwu ^0EH5\H&wu %?0&H5kHwu00H5"Hvu//H5Hvu//H5Hvu %/H5HgvtH5HTvu 150SH5H4vu/1H5Hvu 1ɉ /H5Huu/H5_Huu 1҉/ H5dH ou*Hk H5WHuu2%)565gH5XHnuu2 5nH5HOuu6 4@4HH5H)u 4%H5Hant}H5HInuT1HH{z4H$8t+Ha!H5l1HXzpHH1Mr 64@H5lL1HH{"z 4H$8t+H H5k1HXpHH1q%3HEf.SHH5_1kH߾H1vH5G_1kH߾H1~vH5b_1{kH߾H1YvH5_1VkH߾H14vH5@`11kH߾[H1vff.UHHSHH,kHHH~hH[]fAUIATIUHcSHuHcHHHI}k{HIE(nT(I<$kH5I$H HHyHHmHHH)H)΁HH[]A\A]ff.fH5%.H=n'ifH5-H=-1L c1ɺ1A 1韩ff.@L c1ɺ1A 1ff.@H H=J-g " HH@ H#& &H ''H&Hf.HH=&H5Z&lx@H@1H5bhHH1jff.@USHdH%(HD$1r~" H$HcH>f-bPzuyHH5øHnlH5?HWlj%?@^%*f.. B%ff.fHT$dH+%( H[]À% %H=yDfH=/ddH=]H/Ht?tiH/f.$H-"H5QH$jkH5HSk@f$-DH=9/cHH"/HH5Hkf.HiH.@H5qH=*蕬 #@#H $f%?f f#}D##`H= lH=H5'É%9cu4u0H5,`1eH1g$ff.fHH5<`1eHH1g%"@%"@H5QH=j)u "f"?Ȁ"hHHmD1FH50HAiu2 ["@!H5H!i`4"H5HWbH5H;b H5Hb?H5Hh!!x1H5^EdHH1fS1HH{nH$HR":u HPHt+HH5^1HXcHH1e 3!1HH{mH$H!:u HPHt+HwH5^1HXcHH1ce H5Hg  h1HH{ mH$H :u#HxH=} 7Hl 'H1H5^HX bHH1dH5-Hfu  bH5Hfu %H5HfuH H5HUt rH5H3t 1=g RH5Ht H5H@fu,158 H5H fu. H5]Hfu.H5Heu.N H5QHeu/H5Heu/H }H5\H~eu/t[H5H\euH @ ;H5\FH5H+euH H5Heu H H5HduH H5Hdu H H5Hdu H @H5HduH faH5tHbduo>f/2H54H3duofH5 HduofзH5Hcu H H5Hcu H%H5Hcu uH5Hvcu %VH5yHWcu!4H5eH5cu M@H5DHcu %.H5/Hbu H5Hbu %H5HbuH5HbubH5Hcbu|p7H5H8bu %QH5oHbtH5dHbu 1ɉ H5^HauH5:Hau 1҉H55HauZH5Hau 1:a H5HZu*Hk H5 HFau$% !!gH5*H5Hau @ H5HDZt}H5H,ZuT1HH{jf H$8t+HD H5}X1HX]\HH10^ I @dH5Xo1HH{f3 H$8t+H H5W1HX[HH1]%f.DHH 'HUpHff.fSHdH%(HD$1i D$tHT$dH+%(u`H[fH\$E111HH=fHt D$t4 E1H11H=fC[HD$dH+%(uH\H={Mff.SHH5I 1ZH߾H1e1H5I ZH߾H1ne1H5J kZH߾H1Ie1H5#J FZH߾H1$e1H5FJ !ZH߾H1d1H5qJ YH߾H1d1H5J YH߾H1d1H5J YH߾H1d1H5J YH߾H1kd1H5K hYH߾H1Fd1H58K CYH߾H1!d1H5kK YH߾H1c1H5K XH߾H1c1H5K XH߾H1c1H5K XH߾H1c1H5K XH߾H1hc1H52L eXH߾H1Cc1H5eL @XH߾H1c1H5L XH߾H1b1H5L WH߾H1b1H5L WH߾H1b1H5 M WH߾H1b1H54M WH߾H1eb1H5_M bWH߾H1@b1H5M =WH߾H1b1H5M WH߾H1a1H5M VH߾H1a1H5M VH߾H1a1H5N VH߾H1a1H5AN VH߾H1ba1H5lN _VH߾H1=a1H5N :VH߾H1a1H5O VH߾H1`1H5mO UH߾H1`1H5O UH߾H1`1H5cP UH߾H1`1H5P UH߾H1_`1H5P \UH߾H1:`1H5Q 7UH߾H1`1H5R UH߾H1_1H5R TH߾H1_1H5R TH߾H1_1H5PS TH߾H1_1H5S ~TH߾H1\_1H5FT YTH߾H17_1H5iT 4TH߾H1_1H5T TH߾H1^1H5T SH߾H1^1H5U SH߾H1^H5U 1SH߾H1~^H5U 1{SH߾H1Y^H5V 1VSH߾H14^H5 V 11SH߾H1^H5CV 1 SH߾[H1]fAUIATE1USHH4H=u(pLHVt8H(AH{tJ{ H+tLHHVuMcH_KD H[]A\A]@H1[]A\A]ff.AW.AVAUATUSHHoH=SHxH5HHHu/ff.ft,HHB9t1H[]A\A]A^A_@H5iHHZHtHcP@8HhHHHLdH}QP9MH(I9uHckSL=HAO@E1L%H-L-%L=IE9w@IWHKHLx^LH߅LPMHLD1]H=FAH޹TIHt.A{AGH=LIG(SZf1LqPH1GRDH(MAu IHtXH H=H=*H=H"Ht!+He1H=H/HCHx uDx(u H=uHdHcP(Hc@,HtHH=H2uHcP HkHcP$tHc1f.AWAVAUIATL%.UHSHDI<$L5!1&DLH5Stt@HILRuHcH5HHILh@ RuH-ƼHHDNH[]A\A]A^A_HH=E@SH6HH=Ku[tAUATUHSHHLgH$NA<$@Lct:LHLlK¸u C<,@t5H[]A\A]f.}_uHuI|$Hc&KtH1DS1HdH%(H\$HH=1H9QHHH$H;t!H HD$dH+%(u0H[@H5|P 1 MHH1NH$5MDUSHHbH-E<,tCuH[]H5QP 1LHHH[1]zNf.HHH-RH[]AVAUATUSHdH%(H\$@YHHcH>McHIBD HcH=ɺ5ff.H=:HT$dH+%(Q H[]A\A]A^ 5Dv5m濃f5`"5Mzf.H=)M5+HQH :HKH;1HxHATH=A)HHH$<.N$H1HHTH$ :„t H=L5yMcH-_E1HDLHLHu B<+HH]HAHu1H5tN OJLH1"L:DH5H=-55)fH5[H= 55@f5f58@5f.H= dFH]H HH5PHM_HKH KfD5ff5@5-DH=H5JQHHHH5L 1HHH1J5f5ff55wff5k5Wff5Kx57ff5+X5ff5 85ff55D5f f55ff55ff5{5gff5[5Gff5;h5'@΀f5If5@f5af.5 @5f.5f.5f.z5mf.5Mzf.H=)n5&S25 :f.H=_n55f.5f.5f.5mf.H=IG5KH q 5-Zf. 5 :f.5f.5f.5f.5f.65mf.5Mzf. 5-Zf.H= 1l5 6fDH=5H=t5H=\T5H=45H=5kH=m5KxH=|5+XH=53H=O5H=t5HH CAHH`1H5F BH1DHzH1rLH=*H3H$BfUHSHcHDHHH9H]CH5vHEHHcHyHH͸HHxH)H)΁HH[]ÐAVAUATUSO87<oH=uH@<uH^HHH:E1HpHx7(H=_u?HL*EuHH(AH;tnLkL{$LsHu-1HL HpSuHfD*CIDHD*'9r%[]A\A]A^@<[]A\A]A^1H5D u@[]HA\1A]A^CBHU[H]A\A]A^HBH@HxH1ff.@HHHH1HHu)ȉHHHH1HHH!H-?HHH=<2ff.AWAVAUATIUSHHHdL4%(Lt$8Aփ<$HI?HHt%II)I}>ALHIHCC/H|$ H|$%E=6uiL-II}Ht711n;H HIEtuAUf.I0I9uEl$$L<toHDHHtTH~`uV$ЉD1 uH@D@uHHt@`uD ЃA@AE11H5(LD$HL$^HHDLt$LD$(ILHL$ 较ZYI<MeM}MtLf.A|$u.ID$$L0L>HtHtLH~Ax MM$$MuH|$ tHD$(L HD$ IHD$8dH+%(HHL[]A\A]A^A_11L9HE1.fDR$A3T$$1HBHtHP8Hu1HIBHuAMI}M11LKPfDI1NLAtfDHT$LHLA62Dt$HSLBOLp@HHKHH@At0PHIDH51=HCx@P@IDPXIX6HHWH51=HAVIAUATUHS1HdL,%(Ll$ILd$&HL0A~LLLHA1HHBt1HT$dH+%(uH[]A\A]A^f.5@USHHjt t`kt&H/5Hx7H_HHxH2Hu"u =H[]H HH\f.HXHHt[9ujf.H5L9 1]4H136 H1vUH[]H  ff.HcH=rNH $ HHFaHH<tP=EHe t9=!H t)=yH uH =fH HDfD=H8 HQ HEff.AWAVAUATUSHLdL$%(Ld$xLMKIIHu 'ff.@HH {uHk I;$uLMI$s|HH4I$ALHHH$}fL)D$fonI$Ht$D$ D$(HSH)IG0HL$HHD$8IHDLHD$@8Hs1LI?H $t_1HT$xdH+%(HĈ[]A\A]A^A_fDMM1H5 1H1n3LLH $36H $HufHD$PRSDSHT$XH9D$XHD$pHG@H-Ht$@1LHT$P8HT$HCIG0IDŽ$H)I$GH}@2HI$LHtHtw1ƃH<1H<29r\D$X@KD)fD*:D$XD)D*%0ft %u HwAHܟHԟH=H5>HDE1.HtMxuHx @H@(t HHH=)H;G0tHHD$2HD$1H5z}/HH1O1ff.@SHH= GVH{0认u 1[fDH{[F~fDAWAVAUATUSH(dH%(HD$1YTDEHH==H&H}Hu(ff.HHHCxux+AH5HU-H HfHn~H !HflHH@@5HCxfH5 1 .HH1/HHHH5t2D HH` ډEHL%H=3Lq=}5O<tH=LL%Mu$<ff.fDMd$HMID$0HHD$tHH$HtI1E11@M/H5L1H5>L P*EwxM Mu!kEMd$HMbHHtsH-ALk0ItTIE.HHD$l-Ht9HHf.E'2HHD| A9tH[HHuHD$dH+%(H([]A\A]A^A_úH5 1+H1-H=(HHGHCxyHHizuZf.HpH=11A.H0x&H@(IT$0HHHH9H L0H:L)ID$0HHLp H'H$H@H$HID$0HD$H4$H|$5HHuI|$0(Il$0@HH,I|$0H4$HHH4TtIHlff.ff.fIHH@II9u)L1MME1E1f.I<$H5H<$-H<$H5(A <'Et$xMd$A MuE{AaEH|$)Hxw+EH tIHC0HLL1]6Lc H[HH"=j?j\<OH-zHHLd$HHmHHeH}0LHD$ 4DD$EtHAHH51"0H=H_(Ht5H-kff.HSH1/H[ HuH=1H5$&HHH-HH1/HHu HH=ӗH5HėHDP5K HHHX(H)L-qff.@H[ H{uHk}@@H(HH)Hž@H'HtH=11HAp*HtxuHP0H@(C=HS0HC(dLsH5 1&HHL1(/f.H=HLH-H-HHE0LsCHC0HE(HC(t 1A>_IH1ɺLH+IH@Ht<=Fu3H@H5 1H$%H4$LH1'=IoPLuHk1H5 %LHH1'1H5 z%H1P'1H5 ]%H13'1H50;%HHD$dH+%(H(H1[]A\A]A^A_&H!1H5 $HHD$dH+%(H(1[]A\A]A^A_&E1EAAb8H&_HRH="H5 HH=H$SHdH%(HD$1=D$tHD$dH+%(ufH[ @H\$E111HH=/Ht D$t4E1H11H=R/#HD$dH+%(uHH=af.f.f.DHH H7Hff.fSHH5 1#H߾H1-1H5- "H߾H1-1H5X "H߾H1-1H5s "H߾H1t-1H5 q"H߾H1O-1H5 L"H߾H1*-1H5 '"H߾H1-1H5 "H߾H1,1H5: !H߾H1,1H5e !H߾H1,1H5 !H߾H1q,1H5 n!H߾H1L,1H5 I!H߾H1',1H5 $!H߾H1,1H5$ H߾H1+1H5O H߾H1+1H5 H߾H1+1H5 H߾H1n+1H5 k H߾H1I+1H5 F H߾H1$+1H5 ! H߾H1*1H5  H߾H1*1H54 H߾H1*1H5_ H߾H1*1H5 H߾H1k*1H5 hH߾H1F*1H5 CH߾H1!*1H5 H߾H1)1H5 H߾H1)1H5I H߾H1)1H5l H߾H1)1H5 H߾H1h)1H5 eH߾H1C)1H5 @H߾H1)1H5 H߾H1(1H5 H߾H1(1H5 H߾H1(1H5 H߾H1(1H5 H߾H1e(1H5? bH߾H1@(1H5 =H߾H1(1H5% H߾H1'1H5 H߾H1'1H5k H߾H1'1H5 H߾H1'1H5 H߾H1b'1H5L _H߾H1='1H5o :H߾H1'1H5 H߾H1&H5 1H߾H1&H5" 1H߾H1&H5 1H߾H1&H5 1H߾H1_&H5  1\H߾H1:&H5& 17H߾H1&H5I 1H߾[H1%ff.@SHdH%(HD$1 D$tHT$dH+%(u`H[fH\$E111HH=̎E&Ht D$t4E1H11H= &HD$dH+%(uHL~H=s ff.H=(AUIATE1USHH'fLHt3H AH{tB{ H+tLHHuMcHIBD H[]A\A]H1[]A\A]1AW.AVAUATUSHHoH}HH5HHHu/ff.ft,HHB9t1H[]A\A]A^A_@H5HHHtHcP@:HhHHHLdH}P9MH(I9uHcL=DHAO@E1L%NaH-͑L-eL=IE9w@IWHKHLxNLH߅LwMHLD15%H=AH޹VIHt.A{AGH=OLIG(Zf1LH1DHhAu IGHtZHcHH=H=)HxHt!H1H=&HHCHx uDx(u H=uHHcP(Hc@,HtHH=фHpuHcP HHcP$tH1AWAVAUIATL%UHSHD{I<$L5y1"DLHut3I I~t{A~ M>t4HILBuHcH5HHIDh @uH-HHDWH[]A\A]A^A_HyH=@S1HdH%(H\$HH=QHYHHH$H;3t!H*HD$dH+%(u0H[@H5 1-HH1H$UDUSHHbH-E<,tCuH[]H5q 1HHH[1]f.HHH-rH[]AV-AUATUSHdH%(HD$1B"HvHcH>McHVIBD HcH=5fH=ZqHT$dH+%( H[]A\A]A^͹Dffzf.fuZf._fU:f.?_f.ff.ff.߸fոf.ff.H=dH]HHH5PaHBHH.fDE@%D-( Dff  ff.߷fշf.H=Hfzf.HI:HH1HxHA2H=A)HHH$<.H1HHH$ :„t H=L5McH-E1H DLHLRu B<+cH]HAHu1H5 LH1b]DH=~kPH=S8H=~3H=~tH=TH5C~H=}̵H=~H=~sH=IH5{MH6H=H&H5 1CHH15f.ffH=}TH=|4ӴH=}H5|H=|}qruZf.H=)_N35f.H=f.%IسD 1 Dff.ˀfjf.o@fe!f.~E*f.^% f.:f.f.VŲf.f.~jf.eJf.H=CH~!v% f.H=ټHH?H1Hͱ^űf.Bf.jf.feJf.E*f.% f.f.H=1fDrŰHH AHzrHi21H5n H1W LHzH1DH=xHH$ @SH6HH=qxu[tAUATUHSHHLgH A<$@Lct:LHL\¸u C<,@t5H[]A\A]f.}_uHuI|$HctH1DUHSHcHFHHH9H] H5HEH@HHyHH-HHH)H)΁HH[]ÐAWAVAUATUSH2 <Yu @<uVH@1HHx>H=u@HL*uHH H;Lck LM{L{IuH1LLHsLSuHfD"f<QH[]A\A]A^A_fIfHD"eDy9os1H5 H[H]1A\A]A^A_R fH[]A\A]A^A_HNHxt}H1ff.ff.ff.DHHHH1HHu)ȉHHHH1H1HjH=zBfAWAVAUATIUSHHHdL4%(Lt$8Aփ<$HIHHt%II)I}NLHIH C/H|$ H|$E=BuiL-II}Ht711~H ׬HIEtuAUf.I0I9uEl$$L<toH HHtTH~`uV$ЉD1 uH@D@uHHt@`uD ЃA@AE11H58tLD$HL$nHHDLt$LD$(ILHL$ JZYI<MeM}MtLf.A|$u.ID$$L0L#HtHtLHx MM$$MuH|$ tHD$(L HD$ IHD$8dH+%(HHL[]A\A]A^A_11LHE1.fDR$A3T$$1H HtHP8Hu1HI HuAMI}M11LPfDI1NL?AtH$H@H$HiID$0HD$H4$H|$HHEI|$0[Il$0HHI|$0H4$HHH8tIHlff.@IHH@II9u9L1HD$dH+%(H([]A\A]A^A_DMME1E1fI<$H5h`H<$|H<$H5_A Et$xMd$A MuE[AaEH|$ HxEH _IHC0HLL1Lc H[HH=?.ܬ<H-H Ld$H%HmHHH}0LHD$|$tbHìHRH5_1H=uH_(Ht7H-^ff.fHSH1mH[ HuH=51H5D/HXHH-^HH1HHuxH=S^H5JHD^HD BȸFHHX(HL-ff.@H[ H{uHk}@!@HHtLH%Hž@HeH=#11HAHtxuHHH=LHHtH5HTHL5HkLt 1}_HH1ɺHHIH@Ht<=,u3H@H5z 1H$H4$HH1MwH}@`HI_HM1H5s~HHD$dH+%(HH(1[]A\A]A^A_/H1H5 4HHD$dH+%(H(1[]A\A]A^A_E1EAAb#H=OH59 cH]S1H5HHD$dH+%(uH&H=H1HfD @@H5L1H11HH{H$H':u HPHt+HH51HXHH1 Z1HH{|H$Hѣ:u HPHt+HLH5m1HXeHH18 H5MHmx1HH{ H$Hd:uHxHHFHH51HX HH1HH5MHu >H5LHu %̡H5LHuH qH5LHtZH5LHt 1҉:H5LHt H5LHu,1 H5LHu.bcH5Hu.ʡAH5`LHu.!"H5$LHu H5MeH5H`uVH52f.f.f.f.f.f.HūSHHtHx0H{HHC0HH=tHounH{HxHpWt[C`t+H{/oHtHKHxHr&t*H{0HtH%HHrt[H[ff.@AWAVAUATE1UHSHH=5tHIHx?/uM]HuHI|D-9II1fDDH%HtCH)HLHXHIH}/uH5LM DHHuHLHL[]A\A]A^A_ATUSHdH%(H$1H=t$H$dH+%(WHĠ[]A\ÐHH0HtuH{0HHH9$H/HhHHuH5UH*HmH{0HhIHH9HLHpH)3H1H5Rw HhHXLHHH1DHD$H9D@H7HH[01H5THH1lH{I>AWHAVAUATUSHHGLHH L`(HH ID$`H $H9$LHIoHHIl$XID$@HM1HHL$LhLHCHHCLHuHCHuH4$EHE GNUI@HL$HP -)It$X1IwHMl$@1tH[]A\A]A^A_fDHLH I9H[]A\A]A^A_DI$HI|$@%I$HDH5|u 1H1lfAWHAVAUATUSHHH L`@Lp8ID$`H9LHI_HHI\$XID$@HK1HHL$LhLHEH޿HELHsHEHs~C FDOLCH|$LHIt$X1IwHMl$@1tH[]A\A]A^A_@HLHI9H[]A\A]A^A_DI$H I|$@I$HDH5fDHS:.DC(H=H5SucLc1H5t HL1=@H[{v[]A\ÐH{gH{ ^H[(cDH{GH[ LfDHS1ɀ:.cztXff.=AUATUSHHH0HtGD@uH[]A\A]IHHpHtL-NPf.HHtHsLtHk/HwHuLHHtHPHLH)u]HC0H8Ie@tDHAWAVAUATUSHH|$HHt$dH4%(Ht$xH5(I1MI:Hff.I5LuHLL)H9u>|+ t7HHHHIMLLI)D)HHuL9t` H&Ht#HHtH@HD9A wbMrELCHLHT$xdH+%(HĈ[]A\A]A^A_HϺH5(NH $XH $uA< D< <HA=u1DxHEtfA=t`A wMsH9uTff.HT$E11H:HuPHIH $HzWIFH $IH]HH9tx/tHT$H)IH:HtHt$HFHvHPN:I9RHt$HVH~H>LHHD$LxLxHB8~HϺH5LH $)H $A< t< ff.fH\$(LAE8A rA hEM"f.E>A RA HLIEuAMH$/H|$/LD$LD$H$LLD$ H$HHD$H)H|H$H$Ht$HH$HHT$WHT$H$Ht$ H<HSH $IvH $IHIFHP}IcAWAVAUAATIUSHHLdL4%(Lt$AH@LH0HxHL~KDHń?CD@5H~H@H9C EHH4H$Ht{H=DHq=EtOL,$ML5IfMmMI}Luff.H5H!H;=TIH=HH=HD$dH+%(mH[]A\A]A^A_H1@=tH5811LH11H5H]LLH1]G1H5k -HH1HL-I<$Htt  @H3HH5%HHHHyHC1H5HH1of.1H5j mHH1@fDAWAVAUATUSHHHhT$(L$,DD$dH%(HT$XHV:/H;HfHnHHT$fHnHD$fl)D$@ HT$L`HT$0Ld$85dHaIHuHD$8LH)H|IHL9tHHJAD-/I|-Ht$0E12L|$ 8nHHDD$Ht$ىHLt$(L|$0H f ^HXPH5H91H5[a vH1L1)D$H5=HfoD$HH1fH~=EHD$ff.fHi|HH H9p(tN$1HHuHExHHu{<{L-|MvE1Lt$8E1MD$/H\qH-g4LD$L|$0MfEt AEH|$R{A@{MMIHtB`uMMthE1D|$fDM}I9]`t9HL&nH53Lu1I}@ D$MmMuD|$EAGMM`LD$L|$0Lt$8M[I@H5e3LHP8H2@|I ff.f-z<HLAVDL$8DD$4L$0T$,t$(XZHH[]A\A]A^A_fHHt @`HHP8ftf 1H5W 6HH1 H=LrܸH9H=*ŸHH=詸H|$/1H5W 諻H1聽 xȉ8 H= yHHH51[]A\A]A^A_0IVHD$D$/zIDHD$+1H5wxRL1H5DW H1ݼ*Hy1H5V ޺HH1豼LD$L|$0Lt$8MźH5FV 1LD$袺LH1uLD$^EtrAuUH|$wuHD$EnIVEztHD$D$/NLt$D$/?MLD$L|$0Lt$8ZH|$tE@AWAVAUATUHSHL?H|$HMt[D%yxMHEDHLHBuAt2D8t-DLEHt0Lpf.ۻHL$HH[]A\A]A^A_@L船H|^HD wHUL|$HHH 1M9I?IXZH[]A\A]A^A_ff.fAWAVAUATUSHHXHLvHt$8HT$x@dL$%(Ld$HL%vsL5wD$'1HD$HD$ML=+vMH$,ff.ff.fDMMIGxuIH`HtӀ?tyD-vHHD$8DHHD$0詸Ht$@;4HXDH腸Hu;wH|$8HMMjf.H$HH vIH5vHT$HH=uRLAT5vLL$XŽH H\$@Ht$H=PvHoHcHHC@L5pMHl$L-i-cDHqtE1E11B;HIN0LP(H诳HE`HtHPHHM@H9rH)HPHM$ HE@MvHMtzAF`uI~0LWHHtLx@I蒸I~01MHHH苶[IF01H5R H$HH4$H1-DHl$6H=sL'HtD$'foD$EE(HD$HdH+%(oHX[]A\A]A^A_DH|$H|${f.H|$0HHD$(D-AtHD$(@1H5Q uH1KWfD1H5Q MH1#fDH=rL艴rr<uKHD$1HD$D$'H=薛L5tMdH=*JIPfH=ArA11H5=HHt@D$'<v<uoM(HgEHE(HE0)L$s谴AWAVAUATUSHDr`A7LjIH~IHiLH^HALIH|HMHAWMD$HIH T*1XZHLńLsH{0踾tDH=bHA fDHHu[D]A\A]A^@H{0HHA HutH{HcHA HqfHSHB`HtH bH9u@$AApu Щ^HHDwAND;7tyDHHHXDpHOH@xB& HHGH{HHA HED7AvHH葥HSDpHHANUlHSH@H@H%fDAWAVAUATUH-laS H(HD$@|$HD$|$H=aD$HGxtHGxH([]A\A]A^A_À=lYL-?]Mu'ff.f.Mm MMMtAGtAO9tE<2vE1Et$A9DHxHHLHIHr ff.AHA9s HP H9rtDD)EvHH L3AOA9v.Mw1LH99t9H<蘤AHD$H膤EWHt$IEtzHNLff.HH8HHH HIHJI9u1ff.ff.fA9tHI HJIVAHII9uLHt$讞H|$褞Mm D$M?H=[_HGxutE<tiHH=ZH L`HHT$HɡH= _HH HBHL9tI9LbHD$P'1H5> H1H=^HGx#H=ZHH0HHЄ1H5= 谠H1膢ED$1H5= xH1NHH=Y1/L-YQiMqD$I]8H5< 1HH1H([]A\A]A^A_H]H@xfDSfH0dH%(HD$(1Ht$D$HtH=]H@xtHD$(dH+%(u[H0[DHT$H5H|$H|$y 1H5< H7HH1 cSH0dH%(HD$(1HtZHHtrHBfnBfnHfnH$HD$BfbfoD$fnfbflD$xxHD$(dH+%(H0[fD#yH701H5< HZHHD$(dH+%(uNH0H1[H1H5; H HH1ޟQ4@Hc5g;5gSH=gtV7fHc[fF23fHcHt跞Hc5fHfH@H蘟Hc5fHfHDATIUH-fSHcE0P9|-H}8HH4HHtyDHE8H-yfHcE0H@HE8fLH,HEEaHEtEtEtEtEH"f@0[]A\fHȞHE8H-eHcE0fAVIAUAATMULSHHG GHt HɞHCLsDk Mt(L谞HHt H蠞HHk[]A\A]A^HCf.AWAVAUATIUSH?u HQeL`hH[]A\A]A^A_H耟IH9tRHH D=eHEL5e1H50: HL$螛HL$IDHL1fHdH;G.LHtL轝HMDLH L5 LEdHx;MMHHfdH HH81fAUATUSHHH?諗H{袗H{8Ht?s0~31HDmHHDHHCP脖H{PHuHkpHt$fHEH}HCp_HWHkpHuދCx1tDHHHt9L蹚u+CH[]A\A]DHH[]A\A]@IDIH[]A\A]@AUIATIUDSHHHwH}HHtdH'uXHsHL tM~HtyLu2H3HL tMtMHtHLu1;k t DH[]A\A]øHuHsHL uIDIH[]A\A]ff.AWAVAUATUSHHD$PH$DL$t$ IMHELLIDT$ AABDD$H4$LHHLDT$ IIuHD$ H t"H|$3H|$ 訕uD$ A+E&>Du9DHSHIDGAFDHC fLCqHHfHCMt LUIŋD$ LkCAF@HHH[]A\A]A^A_tCAFDA9DE1D)H{(HHH褘s4H\$(HD$럐MWDuRfDH|$MfDHLH5 H I)H)LPLpH AMB$HFʁwHcH5 4V9H{ IfDH B 4t$X|$ucRtyHz H5 #ff.fDM9tSEEIIBDt=wHfOOOL|$(\$0ALD$8OIcfDH=iO,DH5IONHH }&OH=YLD$HHD1蔇LD$yf.HI PHOL|$(\$0LD$8H H;NHpH5N u nN9tbt]LD$0L|$(Aff.(HNHtsH;uNsHPHmN tHtD9uL|$(LD$0H= NLD$(kLD$(HMMMyH=M轆H=M识FM8H=M荆MHMH HHMQM=tLL$ 1jHcL|$(\$0LD$8)MSHL!HII6H=)ML\$0LT$(LT$(L\$0HL!HIHL!HIHL!HILHAL!H IiML\$0LLD$(dHx;HLLPHHLLD$(L׾1H HLT$(LT$(L\$0I HAFA L!H IMFL\$@LLD$8΂MHD$0LLL$(蹂HT$0H|芄LL$(HKH eLPLD$8HLHHK1LT$(YLT$(L\$@JE1BA6H=<L\$0LT$(LT$(L\$0fAnFfAnH8Kfbf@(fAnFfAnHKfbf@ LII~1t*H K R<&wHcH>BHuL\$0LT$(LT$(L\$0vA6I~L\$0LT$(LT$(L\$0QINIvA1M1L\$0LT$( LT$(L\$0LeLHHI!I>11L\$0LT$(螊LT$(L\$0HL!H ILLLL L~LrLfLcZLNLBL6L*LLhLLL<L'LL$I>11L\$(yL\$(IAFIVMAND$(IvHuHHEH=HLL$oL\$8LT$0|$oLT$0L\$8YD$(t@"D$(t@!D$(t@#D$(-@ $AIvD$(HBHHt$0HPpH 1\$8Ld$@HILl$HILT$PL\$XIELHII}LɂuAEt$() ~L\$XLd$@H\$@Ll$H\$8L\$HiH|$0HD$8誀HL$8t$(H|$@L\$HHALT$Pq+ HT$@HHH 1IL\$@LT$8HD$(H|$(HH&GHT$0HHG2HT$0H|$(HB}HT$0LT$8L\$@BfAnFfAnHFfbf@hII6I~1L\$0LT$(DLT$(L\$0uH5FIL\$HLT$@H~Ht$8HD$0H|$(HV}LT$@L\$HHHD$(HHL\$PHT$H)}HT$HH|$(tHc}Ht$8HFH#FHt$0HxLT$@L\$PI6I~L\$0LT$({LT$(L\$0A6H=1L\$0LT$(LT$(L\$0MFL\$PLLD$H~|MNHD$@LLL$8h|IHD$0HHT$(S|HL$0Ht$@HHDH~HH EHT$0LPHqEHLH f1RLL$HHLD$XLT$8ވLT$8ZYL\$PINIVAL\$0IvI~LT$(MLT$(L\$0IvI~11MEFL\$0LT$(TLT$(L\$0eINIvA1I~ML\$0LT$(LT$(L\$00IVIv1L\$0I~MLT$(EFLT$(L\$0ML\$0LLD$(zHx|IHDA@lPhINIVA1IvML\$0LT$(xLT$(L\$0H5CLD$0T$(ĀLD$0HcT$(M̻wLL$ H5tCHH ݶXCH=HLL$HD1{LL$)L|$(A CBLD$0LD$8fD|$HL|$(\$0T$(LD$0BHBT$(LD$0DT$@HH;BHpDH5BA @ADT$0LD$8\$(DH5FuH=yH<HRBHH;:BsHPH2B u\$(DT$0LD$8HAf|$HHD$PHL|$(H=yELd$0Iĉ\$8HLD$@H;HAH7Ln|uIcH@Ld$0\$8HL|$(LD$@HcTMAH=aA$z3H=NALD$0T$(zLD$0HcT$(H=(ALD$0T$(yLD$0T$(OLD$8D@L|$(\$0LD$(H5=Fu x$cH@Ht(H;@s[HPH@ ui@H=@CyL|$(Ld$0\$8LD$@H|$PLD$(LD$(LD$(H=@LD$(mLD$(?H?H@ADT$0\$(LD$8HHH?AH5AFu#.H?H=HH?@@~H?LD$(HHH?4LT$PL\$XLLd$@Ll$HHT$@L\$P\$8LT$HwH|$0HD$8.xHL$8HT$@LT$HL\$PHAD$(A>@ntBWL\$@HcLT$(swHt$8HFH>Ht$0HxsLT$(L\$@VL\$HLT$@2wH|$0HD$8swHL$8LT$@L\$HHAD$(AHB>HPpHHHp\$8Ld$@Ll$HLT$PL\$XH=%>LD$8T$0DT$(vLD$8T$0DT$(ANH5=DLD$0DT$(zDT$(LD$0H5=LD$(zLD$(qq=d@TtH5u=DLD$(pzLD$(fDAWAVAUATLcUHSHH0MDXLo`dH %(HL$ LHD$EIPDLH\$HDYZY|$ÉEHHA9t|MtwI|HtH4$HHT$wHT$CD';E\s\A)ItKKHsH1fA9uAHuH{m[]A\DATIUHoSHrLHrH1f9uSLHCm[]A\fDH tjH tDHH::H9GuH w1Hmed-tag>H9Pnfxamedu1sff.SH_HqH1[ptff.SH_HqH1[qtUHSHHH(iH1H9SuH{ HkH[]fATHIHUHLHSHDkHtpHHftYI$HtdHHtff.HHHuHHtfMH[]A\fDHhq1H[]A\fDHLf1fAWIAVAUATE1U1SHxHZHt$dL,%(Ll$hIHt9ff.H{GpH‰lt 9tAHHuHT$H5LHHL|$ 1L mHt$$8mHt$(mAEHt$,lHt$0l|$Ht$4#qHt$6qHt$8lHt$<l1Ht$@lA}Ht$DHlA}Ht$HHvlHt$LLilAEHt$PIAƺH5 9sDA9s--HIċ@sj[]A\A]A^DH5 1dDH1nf[1]A\A]A^AUATIUHSHIi=v$9s0-HIċ@iH[]A\A]fDH5 1AdDH1eH1[]A\A]AWAVAUATIUHSHHH}HމAjIHHtDp HD[]A\A]A^A_DI|$ efAnLHIDuHx IHfAn@L`fbf@ hHEHtL8CD&L}EfDL}f.AWIAVAUATI.1USHhHt$Ll$0LdH%(H\$XHh1hHt$4HhHt$8qhHIlHt$t!LaHT$LLxLZfI9u9M$MuL|$DL(gHT$L&fHE1t,HD$HD$HL$fH}Ht^HI9uH]HD$XdH+%(HhD[]A\A]A^A_L4HD$LbL1HHbM$M3D$E1MAMI>?tH|$(`H|$(HHD$ h1)ff.ff.f19DЉH4H>uHt$(;bL$Ht$(DxMAHHL$ DD$MZ|$HD$THIHD$eHT$LdHE1kL|$HHD$LReHT$LPdH*L|$}L#eHT$L!dHE1AcfDD11H4H<tD HH tA 9rL|$LdHT$LcH$A A9rL|$1L}dHT$L{cHHD$IL$M.MtUL|$A}LHt$(H4bHt$,L'bHھL'aHt11H$8dH+%(VHH[]A\A]A^A_@AE1Ld$L|$uIE;.JDL@xaJDLxaHھL`Ht1HX\H<]A6IVHŅH HHHH9uHH 7YA>[1E1ff.HrH9t'HTƋJ H|0uHHT0ArH9uF$ZE1AD$111DB1H|0t D ƒu@tT$HھLw_HAAuL$41L>`HھL>_HLl$L$0ff.f.IM9tKIEHt@L@<_HھL^HtD1AF*-Zff.fAWIAVI1AUILATMUHLSLHeH}Hމ_HHHt@H[]A\A]A^A_DI|$HT$y[HT$HHMM1H5Y ff.ff.A2I3M9u%AHLHL$aHL$LHމAHyDq A]HEEHL$Ht/HHMLLHr]I9H[]A\A]A^A_DHMfE1yAWAVAUATIUSHXHD$HD$HD$IAD$(HL$DD$LL$ fDT$.fL`XDE9ImH|`If=^f=f]H HcH>f= I} T$Ht$"trI<$HL\\I$IE)AXHX[]A\A]A^A_@fvf=tMǺH5 1:WAH1 YBYHX1[]A\A]A^A_Ðf&HI}$LD$0x_DLHD$8HLD$0HHD$@f|$8I}'LD$HHSH|$8HHT$XHT$LD$HHD$0H9ALD$I}f5T$Ht$LD$.HT$I$IuLD$HH)HT$@H|D)[HD$0LD$HHPIHT$AtL)HIHT$H|$LD$HLL$@XHHD$HHx_LD$HLL$@HufAR'fAGALL$H_Hu1L[HD$I<$HuH)H3[D$.Hu Hxq_HD$0HMHt$8HHPHT$@"ZHT$@LL$HHHDEt1ƃ19rH$LL$IHL$0HT$8Ht$ 'HNQI$HLHHD$YI$D$(Jff ;L$(ۅHSI}LD$8HHT$0H|$@VHT$0LD$8HH9T$Ht$I}LD$07LD$0fA JfA>fA tfAt T$(HT$@IMHf`H|$HD$IuH)HYDLHHCI$HL$IuH)H|D)rYT$Ht$I} 0|I<$LHH|$aXI$D$(fI}f wH5 ,@f I}f wH5 1)SH1T5UfIEHkHHD$0HTH9T$Ht$I}HD$8KD$(HL$8HT$0IMxf I} [fHH)LHHHT$0XTHT$0H9T$Ht$I}HD$0HL$0IMHHt$ H$;fDf H5 DfH|$HD$IuH)HtWDLHI$HL$IuH)H|D)CWfNH|$HD$IuH)HWDLHuH5^ fVLD$=t$9uHt$-LD$HHHzHT$xYf-f HT$LD$HBAEfAGHLD$kVLD$WI<$LLD$0HiULD$0fAOuI$HpzZH|$~HD$HxXf=<f=wf=t f=0H|$HUt>Ht$HDHD$I$l$(I<$HLTI$HD$DI<$LHTOff wTH tCj I} LD$0 XfLD$0%fDIǺH5 @H\$@HHL)A)WDLA)If=MIǺH5 HLD$TLD$H5 H5 H52 }H5 lH50 [H5G JH5 9H5E (H5L H5 H5 H5 H5 H5 H5 H5 H5 H5# ~yJMǺH5% OAWAVAUAATIUSHHH$LD$LL$D$UH{IDxUHf=f=f= Tf=f t0f=fAH{DLfE1LHE1,XHD$HH8SHHSHI,H9HEHH[]A\A]A^A_ÐfH HcH>@fffH HcH>Df=f=&f=|HCHD$DffD$Pf|$H|$KTHf=nf= fTH5e HcH>f=fDH5 1HL$hKHL$H16M1HH[]A\A]A^A_Df=ufAgH{DLtH{ DL!1DfAkEIGHH{HDIfH|$HI96DLH|$|u1=fALsLYOA=KED9;-M M)AyDD$LL$ DLLH{NA=MDD$A9?-LL$ M4M(I~LL$RRLL$H=OH5 1IH1K1IDfAH{DL\EH{MoLPKI9W1LHE1THD$HD$lfDfA H{DLH{DLEH{ MoLJI9uH5 1HH1J1bfDfAH{EQHI9f!BLsHD HD$DHD$II9DLLu1fA H{DL,1DfAH{DL1DfAH{ELHI9FLsHD HD$f.HD$II9DLL>u1H54 1HL$8GHL$H1I1fAm H{DLH{ DLDH{LAńiH{6OAHAIflLJLD$0ML)HHT$HHL$(fHHL$(HT$HD$LD$0H9*H{HT$LD$(NHT$HtEHD$0LD$(LHD$HT$8IDH)H<Ht$GHt$HL$0HT$8H9Ht$HHT$HHHH1|$ H= L$ H2J34t$ H9u1LHP@fA H{DL<H{DL#[1fA  DH{LAńH{ EMAHf LJLD$(L)HHT$HHL$FHL$HT$LD$(IH9H{HT$LD$MHT$Ht@LD$HD$(LHT$0KD0H)H<Ht$WFHt$HL$(HT$0H9DgLHHT$OM{D$ LHHH= ff.ff.@D$ H2B34t$ H9u<@fA5 H{DLNH{ DLs5ELkIOLHHL$_EHL$H9H{HD$KnHT$IOH)I|HHL$EHL$H9BH5 1 CH1D1f.fA  H{DLvH{DL1Xf|$EHD$DLHxj,Dt$HD$IVHxHHT$(RDHT$(H9H HHHHEI9fDHD$f)D$f|$95f|$HD$DLHxDt$HD$IVHxHHT$(CHT$(H9H HHHHEI9oH5s 1AH1bC1'f|$ Lt$DLI~6I~IDt$ IfM HD$LHT$(H)H<CIvHT$(H98HDHHHHEI9H5 1@H1B1lf|$HD$Hx&IDt$If HD$LHT$(H)H<fBIvHT$(H9HDHHHHEI9H5 12@H1B1f|$HD$DLHxDt$HD$IVHxHHT$(AHT$(H9H HHHHEI9zH5~ 1?H1mA12fDf|$HD$DLHx>Dt$HD$IVHxHHT$(&AHT$(H9AH HHHHEI9H5 1>H1@1fDf=`f=fff|$/Lt$DLI~t6I~DL[I~ FHff ) H  Dt$PI9+HD$HT$(H<FHT$(Hf9 tHHI9HT$f)T$DfAH{DL^H{DLEH{ DLj,H{DLQ1ffA mH{DL$H{DL EH{ MoL>I9H52 1

1ffA=H{EAHI9{LsHD HD$f.IL9t$ DLLQu1fDIHT$b>HT$IHHHD$HAL$Eu]MD$ N;HH= ff.ff.fT$ H2P34t$ I9uD$ AD$LHI|$L$AD$ ~@HD$L$H@HL HD$L`LeHDE1f= f|$ Lt$DLI~$Ifl$Lt$H5L 1 ;DH1<1fH5L 1:H1<1x@H5 1:H1<1P@H5 1:H1c<1(@H54 1e:H1;<1@H5| 1=:H1<1@H5 1:H1;1@H5 19H1;1@H5 19H1;1`@H5$ 19H1s;18@H5 1u9H1K;1@H5 1M9H1#;1@H5L 1%9H1:1@H5 18H1:1@H5 18H1:1p@H5t 18H1:1H@H54 18H1[:1 @H5\ 1]8H13:1@f|$H5 1)8H191f|$ Lt$DLI~I~]@HfT$ H9H5j 17H191Ff.HD$L`H5 1o7H1E91 H5 1K7H1!91H5 1'7H181H5 17H181H5 16H181zf H D@M9H5 16H1_81$f H PI9f.f Hf T$ HH99HHf dH OP I9H5 15H1s718@HD$Hx=fgf H5 Dt$HI9u-9H5 1HL$ 5HL$H161H5X 1HL$4HL$H161oH5 14H161KH5 1LD$4LD$H1AT61H5 1LD$U4LD$H1A"61H5 1HL$#4HL$H151H54 13H151H5p 13H151dH54 13DH1x51=H55 1L$z3L$H1I51H5 1O3H1%51D$ `f wcHk tRD@M9jH5 12H1411LHE10>XH5 1HL$2HL$H1x41=1ҾHE1=AILL$L2H$LH^#AQ41SLL$IH0@CM~L1C1C1 1Љ1HD$fnfn@fbfAFAA;Iv;CIvDAF_7C Iv!AFD$Hx;1ҾL<HމHD$H87H\H8L0HD$H@H L0HD$LpM4@H5 11H121H5 10H121H5 10H121oH5 10H121KH5 10H1b21'H5 1h0H1>21H5+ 1D0H121H5 1 0H111H5C 1/H111H5 1/H111sH5 1/H111OH5g 1/H1f11+H5s 1l/H1B11H5 1H/H111H5 1$/H101H5w 1/H101H5K 1.H101wH5O 1.H101S1LH91ɉL$ H5 1z.H1P01L1+H5 1N.H1$01HD$LpH5 1.H1/1L*1H5X 1-H1/11LH+91D$ H5 1-H1/1Ff.AWAVAUATUSHH|$`HH$H$dH4%(H$H5%4HD$(HH-LBH1H5HDŽ$IHc5H\$(HD$H|1H11HHH$1IHH$g2HھLg1H$H]H|$(11H5 H$HH|$(11H5 H$HH|$(11aH5 H$ HH|$(116H5 H$@HYH|$(1H5H5 H$(H)H|$(H$1H5 H$HH|$(H$1H5 H$HHH|$(H$1sIHHD$`HHtHx@H@HuL|$`H1HIGLHpTpP8H,LHHIV6H9LLHo/LH9n'H5b f1*H1_,1H|$(3H|$'H$dH+%((HĘ[]A\A]A^A_fDH5 뚺H5 11*H1+&LIH1L%HDŽ$LH12fIHLLH1)$H$8DŽ$1fIHLHH5I1H$0$DŽ$ f$$)$f$$$(f$1H$HD$`HHLh`M$A1H-͠vfDk(IH)LH$%IH8E(HI(H$LLtBi%LHHAADMAD$MtMAMuHL,¸LtILe'IHe(LLtB$fD$H$XAHH$xAĉ$HH$X)HH$PI)H1HH$)HD$`HHHH`HL$ H/%L|$HL$D$\HD$PD$pL$ff.fH$H|$(1|HD$hHHD$ H8HHH$O+HD$ HIH~D$pH$H۞HHHH$f.H}H*u H}@PHmHuHl$0DŽ$H$D$xLH$H$HDŽ$HDŽ$DŽ$HD$HmH{H}H5([*uH}@vL|$ HH$HDŽ$L|)$H$HE$cIE111AHLLp(DL4$Dt$8z/Hf=^uEDAAE)LwH$D$Ll$H@@f>f=tLL$0H5 1Lt$L $HD$!LD$H1A#L $L $H$#L $@H$L $H$rH$HxaH<$X$t,$H$HHHH}HH9uH$ H$PH$RH5 11 !H1"H$8&H$0g@f=Okf=Mf=Lbf=MAAAOfA&#H{$ )fuωHݴIH|H)L)(L)fA H{ (AEfE1fDf=G.HHHHH:AoAEADDEZH$Ll$MIDl$\Ld$PLD$LfINH)IHL[!HT$HL$HHD$L$PHEL$D$L$HL9rH$LD$Dl$\ML$Ll$Ld$PLD$@H@@KAAALL$0fDH|$0H$HQ$HT$hHO#HH$ L$M\$xHT$hLH#H9L11/ HHH=H$HH$IHHH<$I LHI\HHكtH)HHD{=T& AF@HAFAmHHHPHT$ HT$ L4$HӉLH9LHHPHT$ HT$ LHӉH HLHPHT$ HT$HL$HӉʅt1 9rLkH<$bHZH$H%!HT$hH# HDŽ$Hu^D$xuMELLf.; uH8HH(H9uHHu+HDŽ$HDŽ$H$H$TH$zH$H$1HS HT$hHQHH\$H1H( Hsj$1Hs_$1Hs Hs 1HsHs-$1Hs"$1Hs1Hs1Hs $$Hs"#$Hs$H1Hs(|$xHs,t1Hs0#1Hs2#1Hs4SHs81H1Hs<=HD$ H$H(HLt$ L|$HHII_@HHnHHLhLLHIH8HH7HHLhLLHHH\$HL)HƒHt4HH>HЃH)Hхt1H\$Hƃ39rHT$HfHD$ D$pHHD$ H!L$H$H|$(LH$8H$ HHD$HH$m gHD$`E1HHHp`HtsH1HHuBfAH@Ht3Hx@tH9tH9P`uH(ffftH@HuHHuAkH$H$1-.HH$5H\$`HHIHCLHHTHPH$ Ld$`II(HA;$ 1LLB$LH"HtH<$1LH$f$D$HhtH}HD9rH$xH$PktfDHL$HHt HA@q HLAAHL$HH|$ H$@HHl$0HDŽ$@H$@HIHXH}@DŽ$8Ld$0H1fv-H_H9gH$@=IT$@HH9sH$@pH$HxU HHHHLhLL+LHHHLHL$HHH\$HH)HƒNLL$0Lt$L $*L $ALL$0LL $LHL $D$H$HT$hLHwL9tH$uHmH$[LL$0Lt$L $$D\$8Lt$H,$H$ȃD$Eg\$4H}@H$H$@E1H$IAL$MHl$MHf.ulH$H$@J<#DH$8D$pPH$(PHL$@L$D$H$HH$H$AXAYEMLHHALEHD$MeL9`@oJ<+H$HLMeH$IƁLE$IwLL{ED$H1PADHHH9rH9tBLAJD$\L$HD$PH$wH|$L$L H$ H$HH$ H$ H$ $H$ H$ H$ H$z H$h H$V H$ LHH$8H$H$H|$(H$H$8(H$0H$@H$H|$(H$辘D$ H$0HD$P1H$H=yH$D$\$HD$H$芜Lt$@H$H$$LHD$Ht$hH$(LHt|H5 H5- 1H1H$8H$0 VH51 1H1H$0'L$LDH$(L?HSH$(H$Ƅ$H'H;I1L$(IuI} LI;EH$LHMmMuDl-JMHH$H$1HIC1A 1A9tIH:uHHHuH$LH1H$(H,HEL$LO,/x LH$(LHuVHI9tZHHuL111 H$1IHH$(HHt LLH$HUH$(HPHdE111HH$$HD$`HD$PD$HHLp`1ML$Ll$MIHyAjL$E1DIE;GIJ,EtHEHHD$0 HD$8HHE Hp`HD$`HHtA1ff.ff.@Hx@H@fAHiH9ufEZHLL\$8H|$0CLHu fDcE1%C HEFXCD؃ft AA)V$Hl$@B< HH L$\H$B|$\Ht$hU{Ht$pH{Ht$xLH:Hu_Hl$8H|$0LHHH9uA1EH\$0H\$H D9sLHƄ$ HtLl$H<$E1D$ MrLMmMuL|$ NH$H$H|$(蘗Ä1H5ʲ DMMg\$ML$1Ll$Ld$@,D$L|Ht$hH<Ht$p1Ht$x1H$1H$1H$1H$HLHtGH<$M>D$ H\$0H|$tHD$PHD$H\$PH\$Ld$HL3H$$ /!L H$(LLL$H$,H$HLHJLL$|$LO$1tLHEL@xH$H$HLHHI9uL$L1IALƄ$111H<t D T$ HHut$H$HH|$%H|$HzH@uLL$1LH$HLH710ff.ff.fHHH$HHtkx L$LnH$HLiHtH<$jD$ MLTH5` H,HsLIHHHHH9uH /HL11HyH9I L$׋q I4H>uHу|$uH<$MLHH L1ۺ D$H9sIL$xLKH$HLFHtf.H6H?HGHtHVHtHHoHVHHuHHHNff.HSHHGh˿GxxHcH5HCpHc~(HcHShHHHH@HH HH9uK$H[HpZTUHSHHEtcHL 0I!@IsAHt2Pހ:vAQ<;@<,H Ѓ uHޅtp"6EuFHH޿"[]H޿\ ff.}HHEt<"t<\uH޿\ѐHH[]fAUH slATIUSH(HDdL,%(L$IH\$HHH(A@1BHJLH)ƒs/tWL$ tLLfL>f.HL$HzHH Ht Ht HH)H)HHHEHL$ML$HHD$LH=԰HQjjj8HD$(H H@H$dH+%(u(H([]A\A]DL$ LLw^ff.AVHc׼AAUI5żATIH=żVUHcS9+ 5HcHHttHHHcHDHLLkHCH HCHcUH HHHKH[6]A\A]A^fDH`H!HHcff.fAU1ҾATL%jULSHNH5LHHuHC0HH@H=}LH=jIRH=;LAՄ@tYH=H5iSHHHtA ZuH5ҩ WH5H=ʻ]H=ƻH5miHHHtA u=H5 1 H[H]1A\A]fDH5hfH=I1HH[]A\A] HHH9rH9rV 9W ff.u7fATI1UHSHHHX0HHCLHt []A\H5Fh1[H]HA\1@tATUHc-SHHHH-@HEHc-v1IHH-^H}?@HH!11LHHtH@H,L`Hxt1A<$_I@D$HE1D56H '1H|$PHeEH|$PHAD5L5bf$H|$PHH0HHxH\H_H1HߋpHC`H5@cHH|H5dHHD$H5dHHD$(H5dHHD$H5dHHD$H5\LHHD$ HFAHL@H[HEA<$@uEt-H LxLD$LLHACHܵHdxtHJLD$ALHH5d }#t5HHdxLD$ ALHH5c´Et}Lcd$HH|$LMLHL$HD$@HAuAD$H?Hx@H_ HcH>f.H|$1HD$@Lt$(L1HI?HD$89L1Lt$L?5I}"IH2EAEfAELt$LI}"IHEAD$fA$H|$ 1E1D$LH5HEHT$8Ht$(1HAHt$1LAHHt$1LAH}"}HHD$XdH+%(HhH[]A\A]A^A_1?HH|$}"H}HH|$ ƒЉD$LHIHLLt$0HT$01IHD$ LL3EyEHufAI~HTf.ELD$LLHAH5`LD$LLHAH5`H߹?1H|$DLcD$LHt$ 1LHg@DD$HHT$@1HHt$fIEHL$@HD$HITHHTHQHH)HI)e1ɉ΃I|5H<29rIH}DHuD$H L-\ @HH|$'fHFW@H5E@AEHL$@D$HL-Y\ @D$HL-!\ @D$HL-9\ @D$H L-\ @1H߹11HߺH߾1H߹H߾ Hy@LD$LLLAH-1H5 ELH1RAEHL$@D$HATTDNHD$XdH+%(uHUZ P H=0]|HD$XdH+%(uH-Z H=]T@AWH]AVAUATUHSH(uH fdH%(HD$1H|$AYH|$H7jH|$H HvHHxHHHN1HߋpHC0٭H5SHH­=H56\HH&H5(\HIHxH5SHD$HŭxtH5jSL%\AIHLHH/LxtH5BAL:H [HH&5fHI@t@?1H?H߾ ?H߾H #1LIIHH|$YO%H5"HIHD$LIE3A1LHH}tsA1LLH]AHt$1HLEHHD$dH+%(u^H(H[]A\A]A^A_LfDE11LLHE1H|$1dAWHYAVAUATUHSH(H dH%(HD$1H|$A,H|$HǪH|$HHHHxZH2H5Hު1HߋpHC(iH5XHHRH5XHIH5XHIHH5zYIHWx=AMH1H XLLIHHD$H=éIHH$L@ōlHcHHH5I$IH*AD-:HH54_HT$1LAHH$1LAH1HILL}HHD$dH+%(u+H(H[]A\A]A^A_H5/>DAWAVAUATUSH8HL$H FHt$H$HNHHHL$HL$HHH HT$(HL$ DC&tHSH9C`L|$ HHLRHcHL$(HLHHD$2HT$H<$L*LdIIEL8IwI?@IwHIxI}HHHL$HD$M9t+IMHL8IwH<$11`HuIM9uH|$(H[H HL$ HHH8[]A\A]A^A_IHL$HHHD$LM9tM.IEHHpHtIM9uxH5è1H $H4$H8[H]1A\A]A^A_AWAVAUATE1UHSHHH|$HtLMt I<$ ILc{@EtNLsHE1M9s;K/HHIHpHHWLkM9rŋHL59Hu0f.H3thHtmH[HCuMtH3LtDH3Lt5H[HWCtH3uHD$H8SuH1[]A\A]A^A_fDIH0  MtZL5f`H5SHgIcVLdu IcVL<-tr<.{f.IvIHuH|$HHX H3HuHsHHHufDHBRSuff.DxPH.ufDH[]A\A]A^A_@HD$HH5 LH1MHD$Hn^H8vH5TIf.HsHHLu?fDH]H58RHsHHtHcSHuHH$]H5QLcMfHcCD9LPH)HcHHsHHufATUSHdL$%(Ld$IH=̆HHĆ1+H;Lt H{ H(HLuыoD$tRHcHfHLHʈBH;HD$dH+%(H[]A\f.HL$E111LD$uHD$dH+%(uEHM H=?PH5 1LH1fAVAUL-@5ATAUSLHIHtfHff.@vHHHxbHHHDcL1H4H-HCtHHu[L]A\A]A^ff.AWAVAUATUSHHH_H4$Lh(MI1ېA}uI}H9HBMm MuHLH!=HD$HIHh HLp(MQL|$I_MLd$M MAu ʟ6IwHp_1HfSH=A1__imZIHtxuM{Iw1ɺLID$0=AGIG0ID$(IG(ID$IGS1H5 HHH1=5#H5 1`H16 f.L|$Mt!H $L1HuLMLHHL[]A\A]A^A_IOHmJ H5M1zDHH[]A\A]A^A_Ð(H5oHI7HIHh HLp(M9H@(LLAILl$ Ll$HDHl$(Hl$H\$0IHLd$8fHI9tYHLHL`LruLILd$8Ll$ \Hl$(H\$0u0HD$H4H $1HLl$ Hl$(H\$0:HH5=L1IHt$Hpu1H5:MH1#H5'1L4$'H4$HH[H]1A\A]A^A_ff.AWH53?AVIAUATUSHHHH|HH8toDHHEH=hKwH@HH8HHHHH޿ HHxtEHٺ H=KHכHHxH޿ HD@lHhAtHJH1Hx u P(H޿ @HYH$P tѾHJ1HmH&D@,H(AHJH1?HD@0Ep@PXHH[]A\A]A^A_DHIH1HfDH=I&DAȾHHI1HFD@,H(A 4HIH1VHD@0EH=IHٺ Hx01L-xIL=vIDDxx0xWH޿ HqH9h0HٺLHeHDmHL$HR8H<1H?HH8LHyHt@HٺLIH1HH@8J| HHH8LHȀx$HٺH=HHĘHH8LHȀxHٺH=YHHHH8LHȀxHٺH=,HH\L`8LxHٺH=HbD HپH=H?HBX(E1L-G[1HH}t'H=GHH}1HH޿ IHD9bXHR`KHپLH,ºL}Mt;HuHt Lt&1HLHٺH= aHE1HHx.HH}HM HH1,HٺH=FHH@1L-VFL%FEA!A"A#H޿ HNHg9h@~HHHHTLLhH|$0H HtHHxHHHL1HpHE0׎H54HH;LHHH5>AHD$LvDHݎLxtH5#HT$AHLvH = LLLAL^vHH|$OEf1IHD$?HLAGA?H ?HH|$H5HHt$1LAHHHuHڀH"xMVDLH5} 1fDL;1LI$HHHEHPP?HLɌH5ƌHAL1HH8HL%HuLH:P׌HD$HdH+%(iHX[]A\A]A^A_AHLHLRtH5: LA 7?HI$HH@1H?HELHsA PP}f.4MfH H|$@H;H-+AsjH|$@HQH|$@H'HHHxH輾HHh1HߋpHCH5t1HH܊WH0HHxtH0E1LrLLHQH1HH?IgH_UH5RHz1HALHH,HD$HdH+%(u&H3HXLH[]A\A]A^A_AAWAVAUIATUSHH8H|$HHt$1H\H=HWH14KIHM}`HD$MfDL%yMtw@1A|$uI7I<$EMd$Mtuτt>IHH81衾IHIILMMmHD$P@H\$ E1HDHxt{A<$@ttLܾHxMH HHD$H1I}(Ht$1E11H|$HD$(*HD$(HtxBjRfDH{H1Ht$ L#HSHHHNd:ID9s@>HKL<HRH| uHCHI}(E11LHL`HPL1"HxBjH oH9H(@I?1IHmIH571lHHH81[]A\A]A^A_11ҾH[E1@I<$tTLL(I7IHuII1H5x HLHH8H1[]A\A]A^A_鯾MH\$ HzHIHD$LHI$htrHtSLM$MuH8[]A\A]A^A_1H56IHt$H1JHt$H=6H=w H5Mw 1Ht$HHmH9P(II/1H5&w H辻HHAWAVAUATUSHH|$(Ht$dH%(HD$xHGH8wH HwH=xH4H5HX` OHc=ILH9H=xHt4H5$Ḧ́˄Hc5H=H t?HLPPMMPX1ID$!ff.fH(9L9u9ʉ $I{L\$H=̼L\$ $H:HHƄtHGPu_VHuH݃;HX7E1HcH\$8DT$$HLd$@I,ĉL$ L\$ff.HD$H9EH}HxܻLuHD$Iǀ@@LZLMHHՃLH ZHxH2LD1HD$E111LHx(诼Ht xHyHUL L1H xHi2LDH1RH|$H^_HD$Ht$E111Hx(8HoDhbAHL|$LLMH hHxH1LLD1L蝸HxtLHH&1;@@@HHD$0Ht@HLc-E1H$ff.fM9s9Ot=H$HIMIII4$aM~M9rHD$PLl$Dt$ HD$HE1HD$@HD$8HD$0HD$HD$ Dt$_9f.}.rdaK}.bssFH$II(I9Au1HHcкHھH D$oAu 1HcHHD$覺HھHAu$1HHcDd$o耺HھHи1LHD$wDt$oYHھH詸}.dat,f}a!HD$LHD$vt.HMHAVLL$(H" 1H5h _A^XLd$ fH5h 1蝬HH1pn}ataHD$Ld$0LD%uHD$8EHAVLL$HLD$@HH! H5Ph 1̳AYAZ]Dt$_L|$(LHt$P1HH+HHL}HD$H=uII)Hj]Dm D}m LHHD=uEHH54&1*kD}HD$DtLd$@LHD$HEHAVLL$XLD$PLT$(T$HMLl$Dt$ H4 J HH)H9ICL)Ht$PHT$(DHMHL$AUE1HD$H=ztE1HjL6^_p1H<$Hl$Dt$(@HD$AH9HH=!tE1ɉHD$vE1LPHT$AYAZ|$nuDx$DsEtAEH #IMH$H5]f HDHHY PHL$1蜱^_HH9$EtH5k"ML`tHD$D$nL,HD$ H9HD$0H9rHD$8AH9HD$@HL$HH9E1H9AA!EH sH@Dt$(+DH<$HL$Hl$1ADt$PLHL$LHD$H9scHLE1jHL$`6 ~r@$XZHH9$HD$EtAA4H=cr,HD$ MH9sHD$0H9r HD$8H9rHD$@LH9HD$HAH9HE1A!D\$0jHL$5T$8 qP$AXZfEu:H!HIMPHL$Hg 1H5Nd 詯A[](H}"Dt$PHD$PHD$HHD$@HD$8HD$0HD$HD$ 5~UxJHHGHPxt H1H5c ]HH1/AWAVAUATUSHH8HGdL,%(Ll$(IH8HfH=p Im`L5!HtcLH蕩HHt_IH5gLLH=fE11LLL$'D$' |$'HHRP#H9MM`HfLl$S@*AEDHI<$IE@f A~&1H5Z vD9DMH1CH=tfzf聜H‹ofD CAGHHDHfHD$(dH+%(H=fH8[]A\A]A^A_WLDt$9IcAHEH=eLe1I)}t2HH(9S@H<u} t}uff.DD)HI 9t0IcLIff.f.HHAxuDeE9IcoEHHoE@HM HH ~fD3MLH蝘.LcHH5>X 1藚LH1jL%3dfDH5W AtH5W 1XLA׹H1"L%cuH5f1MLl$LH1Hc@@hAUJ=GHD$(dH+%(H8[]A\A]A^A_M}H5V 1覙HL1yL})A c9)ʍBHcH M}1L$H5$V DL$JL$T$LH1L}^bIHB@!H ^q90HHt$E1E1H|$1HHS~{H6HC L9h`Ht;HHT$^|t*HT$BH[H5H8H5i^IIcH|$8HH$Hv`HPHHDa H;V0Hp^Ff ?i =e=>=]=>AAIL9Dd$Lt$0Ld$(LIH5 HHHP1yHt@<<D=}5=A AeDIG`1HL$H5P H豒HH1脔IHL$I?H5豖y@1H5P JH1ffzBiHBHHRPHHHHxL9h(vfD1AAfA ]DAAKAA;H5]1蘑LH1kH5[Hu`H=[HtIH[Lh`HH[]A\A]A^A_H[H5xxtH5jH\$H=[#1"Mz胵H\[HE[HHH[]A\A]A^A_H5[HuHH[]A\A]A^A_H5ZH1@t'H ZHGHDHH@uH=ZIHZL)Jt8HD$H@PPH5ZH1HHHH=rZ-HbZHkZfDAWAVAUIATIUSH8H=SZH=&ZّY1HHP(HZYD<H$HMcHcHHHYHD$LHD$H2HI$HqHcID$HHXHcxht1HYHpID$PhHYHp HXHcxlID$PhHuYH^Y1HR`Hp Hz0HH+=fYH)ID$HPPH5XH衎Hc=XLpHYHpID$PPHYHc=XHpID$PPHXHc=XHpID$PPHXHXHR`HpHz0H$H+=XH)ID$HPPHXHXHR`Hp Hz0HT$H+=XH)ID$HPPHyXHbXHR`Hp$Hz0HT$H+=jXH)ID$HPPH}WC@i_H@HH{Jt8{I}(11AHHtxuHP0HWHHH?HWC@9HCHHLL<J|8rHxIHHVHPHJt:H_Wzt >@PH؊XHqWHZWHAEШuI$ǀ`H8[]A\A]A^A_~D$1EDx$fD+5VH$DD$,HcHHVH@`Hx0LH+=VH+VHID$PPHULHCHJt8HsHLH~Ht$ SHt$ DD$,Mt~"H^H=HnVHt$DD$ HR`Hz0LH+=bVH+;VHIT$RPHLHD$藋H\$DD$ LpID$D+UHIcPhHH:UL$HHD$HCHBL8AD$H9k@`HCHHLL<LD@AHTDHYUHHtHQUD+5$UDD$ H $Hf.HL$HzHH Ht Ht HH)H)HHHEHL$ML$HHD$LcRH=DHQjjj8HD$(H H@H$dH+%(u(H([]A\A]DL$ LLw>ff.AWEAVIAUIATIUHHSHLD$LH$LH߆H$H|H讈LHHpLHeLHJHEHHcT$PLD$HXHPHc@QL@ JDx /QH ,QHH[]A\A]A^A_fAVHcPAAUI5PATIH=PVUHcS9+ 5PHcHHttHPHHcPHDHLLkHC'H PHCHcePH HHH[PH[FP]A\A]A^fDHpH1PHHcPff.fAU1ҾATL%ULSH^lH5BLH,HPHC0HH@H=BLыH=zBIbH=KPLAՄ@tYH=/PH5cHPHHtA juH5< WH5OH=OmH=OH5} HOHHtA u=H5< 1H[H]1A\A]fDH5fH=YO1HH[]A\A]0HHH9rH9rV 9W ff.uGNfATI1UHSHHjHX0H訫HCLHt []A\H5V1[H]HA\1@tATUHc-MSHHHH-M.@HEHc-M1IHH-nMH}?@HLHt@HCAD%LMHE[]A\fDATAUHS!D HH-HEH[`HC|HcMJ MH MHHHX HP@H@H[]A\AWAVAUATUHSHHh"LwdL<%(L|$XAt1Et|HLxM @H HcH>H?11LHfHtH@HLpHLxt1A>_IDD$HE1D%LH L1H|$PHzEH|$PHAD%K H|$PH}HLHHxkHC~HFHK1HߋpHC`zK虂H5'HHcKH5HHD$H5HHD$(H5HHD$H5HHD$H5HJHD$ H0K@HHEA>@HAHjL%L1LY^Et5HJLxeHLALjLD$ HXZHJHxtHHALHjLD$H5F}#A[Xt?HfJHxxHALHjLD$0H5AYAZDIE8EtyLct$HH|$LׄLπHL$HD$@HHD$HL$HjHIxC@H HcH>DH|$1dHD$@Lt$(LI?1HI?HD$8LLt$LI}"I[EAEfAELt$L軃I}"IEAD$fA$H|$ 1E1yD$LGHH5DHHlEHT$8Ht$(1HA~Ht$1LAH~Ht$1LAHy~}"HzHD$XdH+%(fHhH[]A\A]A^A_Ð1?HH|$}" H}H|H|$ ƒЉD$LHIHvLLt$0i~HT$01IHD$ LL}EyEHufAI~HyfHAHjL%SL-LA[XEHHALjLD$LH5U_AXDGFEHHALjLD$H5L^_fH߹?1uH5*HH>-H5HIH5HIHH>H5IH>xEHAMHjH 1=XZL.y$uLIHD$ytH==IH$rL@ōlHcHxHtH5=I$IHdpAD-t=HH5n=vHT$1LAHsH$1LAHs1HILLsHpHD$dH+%(u-H(H[]A\A]A^A_DH5g|-rff.fAWAVAUATUSH8HL$H v/Ht$H$HNHHHL$oHL$HHH HT$(HL$ DC&tH$H9C`L|$ HHB<L|HcJsHL$(HLHHD$b{HT$H<$L*LdIIEL8IwI?@IwHInI}HHHL$HD$M9t+IMHL8IwH<$11uHuIM9uH|$XmH[H HL$ HHH8[]A\A]A^A_IHL$HHHD$LM9tM.IEHHpHLttIM9uxH5;1H $oH4$H8[H]1A\A]A^A_qAWAVAUATE1UHSHHH|$HtLMt I<$:sILc{@EtNLsHE1M9s;K/HHIHpHHsLkM9rŋvH+:L5Hu0f.H3thH0stmH[HCuMtH3LmtDH3Lkt5H[HGCtH3uHD$H8muH1[]A\A]A^A_fDIH0 8MtZL5 H5H IcVLou IcVL<-tr<.{f.IvIHuH|$H 9HX H3HuHsHHHqufDHBRSu됄tPH.uf.H[]A\A]A^A_@HD$HH54& LH1tMHD$H H8pH5If.HsHHLquOfDH! H5xHsHHtHcSH7juHH lH5&LcMfHcCD9LPH)HcHiHsHHufATUSHdL$%(Ld$IH=lHHd1+H;L%pt H{ H(HLpuыD$tRHcHHLHʈBH6HD$dH+%(H[]A\f.HL$E111L wD$uHD$dH+%(uEH H=]H5D$ 1kLH1lu9kfAVAUL-ATAUS5mLHItHtfHff.@lHHjHxlHHHThDcL1Ht5Hm5HCsHHu[L]A\A]A^gff.AWAVAUATUSHHH'H4$Lh(MI1ېA}uI}0jH9HBMm MuHLH! j='HD$HkIHh H+'Lp(MQL|$I_MLd$M MAu 46IwH2gp_1HfSH=&A1__imlIHtxuM{Iw1ɺLnID$0=&AGIG0ID$(IG(ID$IGS1H5%" hHHH1i=u3#H5/" 1hH1vjK3f.L|$Mt!H $L1HLiL%eHHL[]A\A]A^A_eIOH H51oDHH[]A\A]A^A_Ð(jH5HIs7HiIHh H9%Lp(M9H@(LLeAILl$ Ll$HDHl$(Hl$H\$0IHLd$8fHI9tYHLHL`LduLILd$8Ll$ 1Hl$(H\$0u0HD$H4H $1HLl$ Hl$(H\$0:HH5}1TnIHt$Hpu1H5z9fH1chH5g21L4$gfH4$HH[H]1A\A]A^A_+hff.AWH5sAVIAUATUSHnHHH0HH8toDHHEH=pH0HH8`HY#HHHH޿ %hH>0HxtEHٺ H=QNpH0HHxH޿ gH/D@lHhAtHH1pH/x u P(H޿ gH/H$P tѾH1HoHf/D@,H(AHH1oH8/D@0Ep@PXH dH[]A\A]A^A_DH$H1oH.fDH=n&DAȾHH1nH.D@,H(A 4HH1nHO.D@0EH=Hٺ YnH".x01L-L=DDxx0xWH޿ HeH-9h0HٺLmH-HDmHL$HR8H<1vH-HH8LHyHt@HٺLmHR-1HH@8J| /H8-HH8LHȀx$HٺH=;mH-HH8LHȀxHٺH=mH,HH8LHȀxHٺH=llH,L`8LxHٺH=DlD HپH=XlHH,BX(E1L-[1HH}t'H=H6lH}1HH޿ IcH+D9bXHR`KHپLH,ºkL}Mt;HuHt Let&1HLzHٺH=ҜkHE1HHxO.H2cH}HM HʛH1lkHٺH=7kH+H@1L-L%EA!A"A#H޿ HbH*9h@~HHHHTLLIHH81QIHIILMMmHD$P@H\$ E1HDHxt{A<$@ttLQHxSMH ܯHHD$H1^I}(Ht$1E11TH|$HD$(NHD$(HtxBjRfDH{H1Ht$ L#&HSHHHNd:ID9s@>HKL<HRH| uHCHI}(E11LHL`HPL1THxBjH H9H(@I?1OIHmIH51\PHHH81[]A\A]A^A_!R1ҾHY[E1@I<$OtTLL[I7IHuII1H5} HOLHH8H1[]A\A]A^A_QMH\$ H*HIHD$LHI$XNtrHXtSLM$XMuH8[]A\A]A^A_1H5w9OHt$H1:PHt$H=PH= PH5= 1NHt$HHH9P(II/1H5 HNHHAWAVAUATUSHH|$(Ht$dH%(HD$xHGH8'HHH= HH5HX`?UHc=ILH)PH= HdH5HTHc5H=H /LHxLPPMMPX1ID$!ff.fH(9L9u9ʉ $I{L\$H=yOL\$ $H*HHƄt,ff.DH Pu_VHuH;HX7E1HcH\$8DT$$HLd$@I,ĉL$ L\$ff.HD$H9EH}LHxNLuHD$Iǀ@@L:MLMHHLԫH :HxHLD1gYHD$E111LHx(OHt xHYHUL tLH xHILDH1RH|$HX^_HD$Ht$E111Hx(OHoDhbAHL|$LLMH HHxHLLD1uXL}KHxTMLHHI1;@@@HKHD$0Ht@HLc-E1H$ff.fM9s9Ot=H$HIMIII4$NaM~M9rNAt$|1HHcDl$oOHھHND$oHD$(HuAt$D1HHcHD$OHھHMAt$1HHcD|$ocOHھHMD$oNl fE3ALl$1MH$IDt$ DAt$ 1HHcOHھH^MAt$1HHcDt$oNHھH7MAt$1HHcDl$oNHھHMD$o1LH߉D$NHھHLHL$L9rKD5H9H$II(I9>HD$PLl$Dt$ HD$HE1HD$@HD$8HD$0HD$HD$ Dt$_9f.}.rdaK}.bssFH$II(I9Au1HHcMHھHLD$oAu 1HcHHD$MHھHKAu$1HHcDd$opMHھHK1LHD$wDt$oIMHھHK}.dat,f}a!HD$LHD$r t.HMHAVLL$(H 1H5 OGA^XLd$ fH5| 1?HH1`A{}ataHD$Ld$0LD% HD$8EHAVLL$HLD$@HH H5@ 1FAYAZ]Dt$_L|$(L AHt$P1HHLHHLmJHD$H= II)Hj]Dm D}m LH蹯HD- EHH5$1FxD}HD$DLd$@LHD$HEHAVLL$XLD$PLT$(T$HMLl$Dt$ H4 J HH)H9ICL)Ht$PHT$(DHMHL$AUE1HD$H=jE1HjL^_p1H<$Hl$Dt$(@HD$AH9HH=E1ɉHD$vE1LPHT$覮AYAZ|$nuDx$DEtAEH zIMHH5M HDHHI PHL$1D^_HH9$EtH5[MLP:tHD$D$nL,HD$ H9HD$0H9rHD$8AH9HD$@HL$HH9E1H9AA!E蓨HH@Dt$(8DH<$(HL$Hl$1ADt$PLHL$LHD$H9scHLE1jHL$P n@$XZHH9$HD$EtAA4H=S,HD$ MH9sHD$0H9r HD$8H9rHD$@LH9HD$HAH9HE1A!D\$0jHL$T$8 P$AXZfEu:H|HIMPHL$HW 1H5> BA[](HmDt$PHD$PHD$HHD$@HD$8HD$0HD$HD$ :5 xJHHGHPxt H1H5 M:HH1<AWAVAUATUSHH8HGdL,%(Ll$(IH8HfH= Im`L5HtcLHA95AMfnE LAH(fAnM ffA~M 1H}1H}1L-s E;e@_LIcLl$HDs@6H HC Hcx@H6L%/ 1HH IcT$@H%6EL$@f ` j \ N EE1DL% 2 I\$H{"u H! H@(JAtH@HCt#; ~ ; }  HIu0AD$@D9ID$HKHLdLnL3Hx|5HH xA<$@E_H}L 1H5HmnI}(11AHw6HnDxAW.L3HL%  I\$H{"u CC$fD-J  S@D, E11ɅLl$Aff.HCHLtN$E,$A?tU@L2HtC1A@I<4@HI43H3H AHCHN$C@H9Ll$EH{HHc(H "0Hk fDS@? M}`MLl$L%~ ML/JAIzHl=Hp6ff.ff.fHH93HL9` tPuuH=G HuLpH5iLZ.tL0Hx2MLBH wyIHǾ1H=HD$E111LHx(3LHD$6-HD$Ht xBH xt 1A>_IH5 LLWH= E11LLL$'D$'̜|$'HHRP#H9MMPHi Ll$S@AEDHI<$9E@  A~&1H5` V/D9DMH1#1H=T Z a/H‹O D CAGHHDHb ũHD$(dH+%(H=j H8[]A\A]A^A_GLDt$9IcAHEH= L 1I)}t2HH(9S@H<u} t}uff.DD)HI 9t0IcLIff.f.HHAxuDeE9IcoEHHoE@HM HH nfD3MLH}+{.LC.HH5 1w-LH1J/L% fDH5 AtH5 18-LA׹H1/L% eH51MLl$,LH1.H @@XAU:= HD$(dH+%(H8[]A\A]A^A_M}H5 1,HL1Y.L})A w 9)ʍBHcHM}1L$H5 DL$*,L$T$LH1-L}111E1@SHGHH8H1 H= [AWIAVAUATUSHHHHGH|$H8Ht$ҾHzHH=l HHv HL- L9o`%IO`H1DHHt@PxH@HuHHuHcH,E1HD$8HD$Lx`MD\$Mf.L(MIMtMHT$ M$L9t@$t HX0H(MMtIG`HuMo`MMufMMuD\$EPHl$8McH LD$H(D$H EIHHI@HHL9t.HHH H9t HHHyuHHL9uHzIHH= B+Lt$1Hp Hy HuH48}IF HcHPhH; }HxH=, u(IFH=/ HH} PhH HxH= HL9H HHMH+  HHH9m@t"HWHDHHRuH= ItJt8IFH $L)PPH H $Hz H $HHIFPPL=b Hk H $IH=L I_XLLH$3Hc)HL$ LLHI1LLd$(IlDd$Lt$0If. bIHB@!H q90HHt$E1E1H|$1HHS^%{H6HC L9h`Ht;HHT$>t*HT$BH[H5H+H5I IIcH|$8HH$Hv`HPHHDa H;V0Hp^Ff ?i =]/=>^=>&1AAfA DIL9Dd$Lt$0Ld$(L"IH5ӠHHHP1-yHt@<<D=e=}AAeDIG`1HL$H5 H%HH1d'IHL$I?H5)y@1H5 *%H1&fAAAAfzBiHBHHRPHHHHoxeL9h(VH51$LH1f&H5 Hu`H= HtD0H Lh`HH[]A\A]A^A_H H5sxtH5eHW(?H= *X1[H ~HHW H@ HHH[]A\A]A^A_H5 HuHH[]A\A]A^A_H5 H1@tBH HGff.ff.fDHDHH@uH= IH L)Jt8HD$H@PPH5y H1HHHH=R %HB HK lfDAWAVAUIATIUSH8H=3 H= $ 1HHP(H  D<H$HMcHcHHH HD$LHD$H$HI$HqHcID$HH Hcxht1Hv HpID$PhHc Hp H HcxlID$PhHU H> 1HR`Hp Hz0HH+=F H)ID$HPPH5 H!Hc= LpH HpID$PPH Hc= HpID$PPH Hc= HpID$PPH H HR`HpHz0H$H+= H)ID$HPPH Hv HR`Hp Hz0HT$H+=~ H)ID$HPPHY HB HR`Hp$Hz0HT$H+=J H)ID$HPPH] C@i_H@HH{Jt8[I}(11AH#HtxuHP0H HHHH C@9HCHHLL<J|8R Hx)"HH HPHJt:H? zt >@PHXHQ H: HAEШuI$ǀ`H8[]A\A]A^A_~D$1EDx$fD+5 H$DD$,HcHH H@`Hx0LH+= H+ HID$PPH LHCHJt8HsHLH~Ht$ 3Ht$ DD$,Mt~"H^H=HN Ht$DD$ HR`Hz0LH+=B H+ HIT$RPHLHD$wH\$DD$ LpID$D+ HIcPhHH L$HHD$HCHBL8AD$H9k@`HCHHLL<LD@AH DH9 HHtH1 D+5 DD$ H $Hp $D!CνDD$EB$1AZ(DDD$D1D!AD1ʉ D1!A1ӉD1DEZD\$!11A|Aj EZ<Ήl$!1*ƇGAj1l$!A1 F0 1!A11A5FDEb Dd$!1AؘiEb, 1Dd$!1ADEB41!1 [ 1!1A4\Eb81I@!1Az |$ԍ"k1!1Aq1!1A Cy 1!1A3!I1!1|$ ΍b%1!1@@1!1|$ QZ^&1!1A6Ƕ1!1|$ ΍]/։1!1SD1!1A ؉ 1!1|$l$э71!1!ȋl$ 1!1A7É1!1|$  1!5ZE11͉l$!1A㩉 1=L*!Љl$1t$1!A og1 1!1Ή1!ʼnl$1l$ B91D$q11‹D$ 0"am1A< 81Ɖ11|$ D꾤11|$K1A5`K1׉p 1111A~( 1A>'111|$ 0ԉ11׋T$211֋T$ 9ى11ʋL$111A;|l$ 1NjD$0eVĉ11AD")Dt$  1A *CA<# A1A  19DAAՋl$ 1|$ Y[eD 1A Dt$ A1A3}  1|$΍]DA A1AO~oDDt$  1A ,D\$ 15CƋl$  1ANAAD 1A~S  1A5: 1|$ 7* 1ӆ A1 T$AAHD$L$I9bD$DEADD|$A1E1EA1E1ADAD1AbAD$l$ ADDl$,D11D1EE1A1BbDT$(DAى$AD1DAыT$8A1DE11AA1AD$G!bDDL$0DAE1A1A1DAE11AAGbD$DDD$4DDt$<T$ E1A1A1AC0bAD$A1DA1AL$|$ F40D$Dt$EoLm ITL`@oCBoC B oC0B0HL@I@Hu`LL+bfDH0LHu H|0I|7Hu(HH)H)ȃ1ɉσL8L>9r0u DAD~ L3L2Dt ft L} @AUIATIUSHdH,%(H$HHHLLHH$H$dH+%(uHĸ[]A\A]^ff.AWAVAUATUSHH $HAdL4%(L$IHHI7L$1HHt@+uGLI<HH)@HHuLL4f{¸uHu;LL01H$dH+%(u+H[]A\A]A^A_fLHLRKf.f.ATUSHH?HtfHHH|uzHcHH}IHtF1@IHH|HuLHL[]A\fHE1fDHt7UHSHH?HtHH{HHuHH[]ff.@AWAVE1AUATUSH8HHE1E1E1HxH- E1HD$HD$ff.HDE@uHL$H4Ht$Et ABL98MELIcDT$ H`DT$ IHD$I4HHT$u!jf.E1HCHtKD}@tDD D Eu<\E<'HHuH|$DT$,Ht$ Ht$ DT$,HHD$IDDU@Ht#ff.fDSHHDU@uHD$H|$H8L[]A\A]A^A_@ADEt<"?E1<'t4<"(AE1E1E1E1fAD@AI`HAWAVIAUI!ATUHSHHHtrL%3 fCHtTDAT@u "<:wIsH\tHDuH[]A\A]A^A_I9t;H ntI^IH_1@f.HH=touf.AWAVAUATUSH?dL<%(L$IH6Ht$8IHE1D$0Aff.@IcH,H H $}@Cl$0HHT$@HD$X%=@HH5Q?HH1H#H HD$H 11HHD$HxyHT$HHHD$HH9D$tHHD$HHT$HD$HT$H )ff.ff.BHhA@uH|$Ht$8HIH9eH91HH<uH<H4AH|$H<H|$HIAEpI}xT$,AEpHH4L9T$,LIExIc}pHt:=fAH7UHD$8EIDLP@AE0I}8AE0HH4IcU0IE8\1AHTHD$8Et=AA19fDHA AHD$8EcO1A2LOT$,HIEx*AHFTHD$8E{DD$EDD$AHTHD$8Ht$AQME1WHfAUATUSHO0ukGHaH uZIIHtS H5^AHSLHEHtF1M9HCXLk S(H[]A\A]+H1[]A\A]LfDAUATUSHW0dH%(HD$1[HtSGLH uE1HH@ʼnP(x5Ht$HP8,$Ht?kf.{1HT$dH+%(uDH[]A\A]KHD(IHPHt$HPE,$ f.USHH(H dH,%(Hl$t\1HL$ HT$tgH)RH5!H{ HEJS(HC`uOHC HT$dH+%(uMH([]Ëw~$HP0CHC`kT$ 1뺐H{ C(HC`5Dw,~#HSHP0C,HCh[1ff.fATUHSH H@dL$%(Ld$It_HcE09|7Hu@HcLH<HT$dH+%(uFH []A\fD)I<1HcH]01HL$ HT$guLff.ATUHSH H@dL$%(Ld$ItwHuHHE09|3HcLHHT$dH+%(u\H []A\fDHc)1HHcHHI<2]0HuHf1HL$ HT$p1~ff.USH(wdH%(H\$H~ HHPs,~ HHPH{`HtH{hHtH{@S(H{8H{@yH{HpCp~51HCxHH(H[]H{ gf#HL$ HT$H߾V; $$ =syntax errorError: discardingError: poppingmemory exhaustedCleanup: discarding lookaheadCleanup: poppingPT_NULLPT_LOADPT_DYNAMICPT_INTERPPT_NOTEPT_SHLIBPT_PHDRPT_TLS"end of file"INTLNAMEPLUSEQMINUSEQMULTEQDIVEQ'='LSHIFTEQRSHIFTEQANDEQOREQ'?'':'ORORANDAND'|''^''&''<''>'GELSHIFTRSHIFT'+''-''*''/''%'UNARY'('ALIGN_KBLOCKBINDSQUADLONGSHORTBYTEASCIZSECTIONSINSERT_KAFTERBEFORELINKER_VERSIONDATA_SEGMENT_ALIGNDATA_SEGMENT_RELRO_ENDDATA_SEGMENT_ENDSORT_BY_NAMESORT_BY_ALIGNMENTSORT_NONESORT_BY_INIT_PRIORITY'{''}'SIZEOF_HEADERSOUTPUT_FORMATFORCE_COMMON_ALLOCATIONOUTPUT_ARCHINHIBIT_COMMON_ALLOCATIONFORCE_GROUP_ALLOCATIONSEGMENT_STARTINCLUDEMEMORYREGION_ALIASLD_FEATURENOLOADDSECTCOPYINFOOVERLAYREADONLYTYPEDEFINEDTARGET_KSEARCH_DIRMAPENTRYNEXTSIZEOFALIGNOFLOADADDRMAX_KMIN_KSTARTUPHLLSYSLIBNOFLOATNOCROSSREFSNOCROSSREFS_TOORIGINFILLLENGTHCREATE_OBJECT_SYMBOLSGROUPOUTPUTCONSTRUCTORSALIGNMODSUBALIGNPROVIDEPROVIDE_HIDDENAS_NEEDEDCHIPABSOLUTENEWLINEENDWORDORDERNAMEWORDASSERT_KLOG2CEILPUBLICDEFSYMENDBASETRUNCATERELINPUT_SCRIPTINPUT_MRI_SCRIPTINPUT_DEFSYMCASEEXTERNVERS_TAGVERS_IDENTIFIERGLOBALLOCALVERSIONKINPUT_VERSION_SCRIPTKEEPONLY_IF_ROONLY_IF_RWSPECIALINPUT_SECTION_FLAGSALIGN_WITH_INPUTEXCLUDE_FILEINPUT_DYNAMIC_LIST','';'')''['']''!''~'$acceptfilenamedefsym_expr$@1mri_script_file$@2mri_script_linesmri_script_command$@3ordernamelistmri_load_name_listmri_abs_name_listcasesymlistextern_name_list$@4ifile_listifile_p1$@5$@6$@7input_list$@8input_list1@9@10@11sec_or_group_p1statement_anywhere$@12wildcard_namewildcard_maybe_excludefilename_specsection_name_specsect_flag_listsect_flagsexclude_name_listsection_name_listinput_section_spec_no_keepinput_section_spec$@13statement$@14$@15statement_liststatement_list_optlengthfill_expfill_optassign_opseparatorassignmentopt_commamemory_spec_list_optmemory_spec_listmemory_spec$@16$@17origin_speclength_specattributes_optattributes_listattributes_stringstartuphigh_level_libraryhigh_level_library_NAME_listlow_level_librarylow_level_library_NAME_listfloating_point_supportnocrossref_listparen_script_name$@18mustbe_exp$@19$@20$@21memspec_at_optopt_atopt_alignopt_align_with_inputopt_subalignsect_constraint$@22$@23$@24$@25$@26$@27$@28$@29$@30$@31$@32atypeopt_exp_with_typeopt_exp_without_typeopt_nocrossrefsmemspec_optphdr_optoverlay_section$@33$@34$@35phdrsphdr_listphdr$@36$@37phdr_typephdr_qualifiersphdr_valdynamic_list_file$@38dynamic_list_nodesdynamic_list_nodedynamic_list_tagversion_script_file$@39$@40vers_nodesvers_nodeverdepvers_tagvers_defns@41@42opt_semicolon\%03o%F%P: EOF in comment ldlex.l in script in expressionbad buffer in yy_scan_bytes()%F: macros nested too deeply --shared--library=%s%P: %s: missing argument %P: unrecognized option '%s' nodefinitionsnosymbolicpure-text--defsym%F%P: invalid number `%s' Usage: %s [options] file... Options: %s-%c%s-%s%s @FILERead options from FILE %s: supported targets:%s: supported emulations: ELF emulations: both Report bugs to %s <%{dist_bug_report_url}>ignore-allreport-allignore-in-object-filesignore-in-shared-libs%F%P: bad -plugin-opt option %s%c%s%F%P: -shared not supported %F%P: -pie not supported descendingascending.text-segment.rodata-segment.ldata-segmentplacewarndiscardshare-unconflictedshare-duplicated%s%s%s%s%s%s.mapKEYWORDSet architecturemri-scriptRead MRI format linker scriptdpdependency-fileWrite dependency fileforce-group-allocationSet start addressExport all dynamic symbolsno-export-dynamicenable-non-contiguous-regionsdisable-linker-versionenable-linker-versionEBLink big-endian objectsLink little-endian objectsauxiliaryfilterIgnoredgpsizesonameFILENAMEPROGRAMno-dynamic-linkerSearch for library LIBNAMElibrary-pathDIRECTORYsysroot=Set emulationprint-mapnmagicDo not page align datano-omagicSet output file nameOptimize output fileout-implibGenerate import libraryPLUGINLoad named pluginplugin-optARGfltoflto-partition=fuse-ld=no-map-whole-filesQyemit-relocsrelocatableGenerate relocatable outputjust-symbolsremap-inputs-fileremap-inputsPATTERN=FILEstrip-allStrip all symbolsstrip-debugStrip debugging symbolsno-strip-discardedtraceTrace file opensRead linker scriptdefault-scriptRead default linker scriptdTrequire-defined[=SECTION]UrPrint version informationdiscard-allDiscard all local symbolsdiscard-localsdiscard-nonetrace-symbolTrace mentions of SYMBOLstart-groupStart a groupend-groupEnd a groupno-accept-unknown-input-archno-add-neededno-as-neededassertBdynamicLink against shared librariesdycall_sharedBstaticdnnon_sharedBno-symbolicBsymbolicBsymbolic-functionsno-check-sectionsno-copy-dt-needed-entriescrefOutput cross reference tableSYMBOL=EXPRESSIONDefine a symbol[=STYLE]disable-multiple-abs-defsembedded-relocsGenerate embedded relocsTreat warnings as errorsno-fatal-warningsCall SYMBOL at unload-timeforce-exe-suffixno-gc-sectionsno-print-gc-sectionsgc-keep-exportedhash-size=Print option helpCall SYMBOL at load-timeMapFILE/DIRno-define-commonDo not define Common storageno-demangleDo not demangle symbol namesno-keep-memoryno-undefinedno-warningsno-allow-shlib-undefinedallow-multiple-definitionAllow multiple definitionserror-handling-scriptAllow undefined versionno-undefined-versionDisallow undefined versiondefault-symverCreate default symbol versiondefault-imported-symverno-warn-mismatchno-warn-search-mismatchno-whole-archiveTurn off --whole-archivenoinhibit-execnoinhibit_execnostdliboformatSpecify target of output fileprint-output-formatPrint default output formatprint-sysrootPrint current sysrootqmagicreduce-memory-overheadsmax-cache-size=SIZEno-relaxretain-symbols-filerpathrpath-linkCreate a shared libraryBshareablepic-executableno-piesort-common[=ascending|descending]sort_commonsort-sectionname|alignmentspare-dynamic-tagsCOUNTsplit-by-file[=SIZE]split-by-reloc[=COUNT]statsPrint memory usage statisticstarget-helptask-linkDo task level linkingtraditional-formatsection-startSECTION=ADDRESSSet address of named sectionTbssSet address of .bss sectionTdataSet address of .data sectionTtextSet address of .text sectionTtext-segmentSet address of text segmentTrodata-segmentSet address of rodata segmentTldata-segmentSet address of ldata segmentunresolved-symbols=[=NUMBER]dll-verboseversion-scriptversion-exports-sectiondynamic-list-datadynamic-list-cpp-newdynamic-list-cpp-typeinfoUse C++ typeinfo dynamic listdynamic-listRead dynamic listexport-dynamic-symbolExport the specified symbolexport-dynamic-symbol-listwarn-commonwarn-constructorsno-error-execstackwarn-execstack-objectsno-warn-execstackno-error-rwx-segmentsno-warn-rwx-segmentswarn-multiple-gpwarn-oncewarn-section-alignwarn-textrelwarn-shared-textrelwarn-alternate-emwarn-unresolved-symbolserror-unresolved-symbolswrapignore-unresolved-symbolpush-statepop-stateprint-memory-usageReport target memory usageorphan-handling=MODEno-print-map-discardedno-print-map-localsno-ctf-variablesctf-share-types=../../ld/ldlang.c.init.fini0x%s %W %pB %W (size before relaxing) (null)0x%V (local) %s CTF warningCTF error%s: %s *?[?*[/DISCARD/.ctf Allocating common symbols %*s0x%-16s%10lu GB%10lu MB%10lu KB %10lu B%F%P: invalid data statement end[unresolved]*undef*[!provide]Fail with %d SORT (CONSTRUCTORS) CONSTRUCTORS EXCLUDE_FILE(%s) SORT_BY_NAME(SORT_BY_ALIGNMENT(SORT_NONE(SORT_BY_INIT_PRIORITY(Address of section %s set to CREATE_OBJECT_SYMBOLS FILL mask 0x%02x0x%V %W %s 0x%v0x%V %W RELOC %s %s+ *fill*0x%V %W %s0x%V %W load address 0x%V%-34sTARGET(%s) OUTPUT(%sLOAD %s START GROUP END GROUP INSERT %s %s .ctors.dtorself32-bigelf64-bigelf32-littleelf64-little-l$SYSROOTload basesubsection alignment*ABS* Discarded input sections Memory Configuration AttributesLengthOriginName%-16s %-18s %-18s %s 0x%-16s 0x%*s!.init_array.fini_arrayCOMMONSHT_PROGBITSSHT_STRTABSHT_NOTESHT_NOBITSSHT_INIT_ARRAYSHT_FINI_ARRAYSHT_PREINIT_ARRAY,:%F%P: target %s not found 0x%V %pT %pI %F ALL%FGNU ld version 2.41-4.el8_10.1?*]%F%P: multiple STARTUP files program header type__load_start_%s__load_stop_%sC++Java%pB (%pT) .exports__start_%s__ehdr_start.stabstr.startof.%sphdr flagsphdr load addresstypeinfo name for*typeinfo for*operator new*operator delete*SANE_EXPR%X%P: unknown feature `%s' %16s: %6.2f%%srec%F%P: unknown format type %s GLOBAL_ Set Symbol %G %P: %pB: reference to %s %P: %pB: definition of %s ../../ld/ldmain.c; %D: first defined hereusing multiple gp values%P: %C: %s%s %P: %s%s %P: %pB: %s%s %s(%s)%X%H:+%v%P: %H: %s%s elf_x86_64--sysroot=x86_64-redhat-linux-gnuCOLLECT_NO_DEMANGLE_init_finiLDEMULATION%F%P: missing argument to -m -mips1-mips2-mips3-mips4-mips5-mips32-mips32r2-mips32r3-mips32r5-mips32r6-mips64-mips64r2-mips64r3-mips64r5-mips64r6-m486built in linker scriptusing external linker script:using internal linker script:%F%P: no input files %P: mode %s %s: \ %s %s: %P: error writing file `%s' %P: error closing file `%s' undefined-symbolerror handling script%X%X%P: %s: %E a.out../../ld/ldwrite.c.stab$GDB_STRINGS$$GDB_SYMBOLS$%F%P: final link failed: %E %X%P: %s ../../ld/ldexp.c%F%P:%pS %% by zero %F%P:%pS / by zero MAXPAGESIZECOMMONPAGESIZENULL TREE %pB:%s+0x%vPROVIDE (%s = ("", ASSERT (, %s) (%s)+=-=*=/=<<=>>=&=|=||&&==!=<<>>MAXMINASSERTGNUTARGET%pS SYSLIB ignored %pS HLL ignored Supported emulations: %s: GNU ld %s Supported emulations: %s %F%P: please report this bug ../../ld/ldmisc.c%10s%pB: in function `%pT': %pT%u%s(%pA+0x%v)[%s]%s generated(%s)%s%s+0x%v (type %s)%s:%uno symbol%p%ld%lu%%%c%F%P: internal error %s %d /ldscriptscannot find script file %s opened script file %s /dev/nullNULremove input file '%s' Input File Remapping Pattern: %s Maps To: %s attempt to open %s failed attempt to open %s succeeded %P: cannot find %s (%s): %E %P: cannot find %s: %E %P: cannot find %s inside %s missing-lib../../ld/ldcref.c%X%P: cref alloc failed: %E Cross Reference Table SymbolFile No symbols ../../ld/plugin.c.gnu.linkonce.t.%P: warning: %P: error: (symbol from plugin)WEAKDEFWEAKUNDEFDEFAULTPROTECTEDINTERNALunknown LTO kind value %x%P: %s: duplicated plugin pass-through=_onload%F%P: %s: plugin error: %d UNKNOWNPREVAILING_DEFPREVAILING_DEF_IRONLYPREEMPTED_REGPREEMPTED_IRRESOLVED_IRRESOLVED_EXECRESOLVED_DYNPREVAILING_DEF_IRONLY_EXPmd5sha1uuid/dev/urandomi386:x86-64zstdsysvbothundefsmuldefsmax-page-size=common-page-size=stack-size=noexecstacknounique-symbolglobalauditnostart-stop-gcstart-stop-visibility=start-stop-visibility=defaultstart-stop-visibility=hiddennosectionheaderinitfirstinterposeloadfltrnodefaultlibnodeletenodlopennodumplazyoriginnouniquenocombrelocnocopyrelocnorelronoseparate-codenocommonnotexttextoffnoextern-protected-datanoindirect-extern-accessnodynamic-undefined-weaknoreloc-overflowcall-nop=prefix-addrsuffix-nopprefix-suffix-ibtpltibtshstkcet-report=report-relative-relocx86-64-baselinex86-64-vlam-u48lam-u48-report=lam-u57lam-u57-report=lam-report=nopack-relative-relocs%P: warning: -z %s ignored Bgrouppackage-metadatacompress-debug-sectionsdepauditdisable-new-dtagsenable-new-dtagsno-eh-frame-hdrexclude-libshash-styleno-ld-generated-unwind-infoelf64-x86-64i386:x64-32elf32_x86_64elf32-x86-64elf_i386elf32-i386ldscripts/elf_iamcu.xuldscripts/elf_iamcu.xrldscripts/elf_iamcu.xbnldscripts/elf_iamcu.xnldscripts/elf_iamcu.xdweldscripts/elf_iamcu.xdwldscripts/elf_iamcu.xdceldscripts/elf_iamcu.xdcldscripts/elf_iamcu.xdeldscripts/elf_iamcu.xdldscripts/elf_iamcu.xsweldscripts/elf_iamcu.xswldscripts/elf_iamcu.xsceldscripts/elf_iamcu.xscldscripts/elf_iamcu.xseldscripts/elf_iamcu.xsldscripts/elf_iamcu.xweldscripts/elf_iamcu.xwldscripts/elf_iamcu.xceldscripts/elf_iamcu.xcldscripts/elf_iamcu.xeldscripts/elf_iamcu.xelf_iamcuelf32-iamcupei-x86-64pe-x86-64ei386pep.c__image_base____size_of_stack_reserve____size_of_heap_reserve_____ImageBase.debug_native__size_of_heap_commit____size_of_stack_commit____major_subsystem_version____minor_subsystem_version____subsystem____major_os_version____minor_os_version____major_image_version____minor_image_version____file_alignment____section_alignment____dll____dll_characteristics__.idata$lib%s.dll.a%s/.idataarelent: %s@%#lx: add=%li pcrel %d bit rel. +%s NtProcessStartupa.exe__pei386_runtime_relocator__head_%s() -%s *%s .buildid.idata$2%s.%cWinMainCRTStartupmainCRTStartup__PosixProcessStartuplib%s.alib%s.lib%s%s.dlllib%s.dll.rdatabase-filefile-alignmentmajor-image-versionmajor-os-versionmajor-subsystem-versionminor-image-versionminor-os-versionminor-subsystem-versionsection-alignmentsubsystemsupport-old-codeno-leading-underscoreoutput-defexport-all-symbolsexclude-all-symbolsexclude-modules-for-implibkill-atadd-stdcall-aliasenable-stdcall-fixupdisable-stdcall-fixupwarn-duplicate-exportscompat-implibenable-auto-image-basedisable-auto-image-basedll-search-prefixno-default-excludesenable-auto-importdisable-auto-importenable-extra-pep-debugenable-runtime-pseudo-relocdisable-runtime-pseudo-relocenable-long-section-namesdisable-long-section-namesno-insert-timestampenable-reloc-sectiondisable-reloc-sectiondisable-high-entropy-vadisable-dynamicbasedisable-forceintegdisable-nxcompatdisable-no-isolationdisable-no-sehdisable-no-binddisable-wdmdriverdisable-tsawarewindowsconsoleposixwincexboxi386pep__loader_flags__pei-i386pe-i386ei386pe.cDllMainCRTStartup@12ldscripts/i386pe.xuldscripts/i386pe.xrldscripts/i386pe.xbnldscripts/i386pe.xnldscripts/i386pe.xldscripts/i386pe.xathumb-entryenable-extra-pe-debugdisable-large-address-awarei386peelf64bpfelf64-bpfle%P: %pB: bfd_stat failed: %E .so.includelibc.sofound %s at %s lib64RIGIN}IB}../../ld/ldelf.c%.*s%s/%s%.*s%s%s needed by %pB LD_LIBRARY_PATHLD_RUN_PATH/var/run/ld-elf.so.hints/etc/ld.so.conf.note.gnu.build-id.note.package.note.GNU-stack.eh_frame_entry.eh_frame.eh_frame_hdr.gnu.warning%s/lib%s%s.so.rela.dyn.mbind.bss.mbind.data.mbind.rodata.mbind.text.rel.dyn.rel.gnu.warning..note.plt.tdata.interp.sdata.commentLIBRARY%s.%s$:-_?@$:-_?/@<>CODEconstantDESCRIPTIONDIRECTIVEEXCLUDE_SYMBOLSEXPORTSHEAPSIZEIMPORTSnonameprivateSTACKSIZE%s.%s%s%P: %s:%d: %s SEGMENTS-heap-attr-export-aligncomm-exclude-symbolspdb/namesdll stuff.debug$T.debug$S__fu%d_%F%P: can not create BFD: %E .edata.reloc%X%P: add symbols %s: %E ../../ld/pe-dll.c%s_d%06d.o.idata$7.idata$5.idata$4.idata$6__nm____imp__inamelibcegcc__rtti_%s:%s ->%s LIBRARY NAME BASE=0x%lxDESCRIPTION VERSION %d.%d VERSION %d STACKSIZE 0x%x,0x%x STACKSIZE 0x%x HEAPSIZE 0x%x,0x%x HEAPSIZE 0x%x SECTIONS CLASS READ WRITE EXECUTE SHAREDEXPORTS @%d PRIVATE CONSTANT NONAME DATA IMPORTS == ; no contents available %s_nmth%06d.o__nm_thnk_%s_fu%06d.o%s_rtr%06d.o.rdata_runtime_pseudo_reloc%s_ertr%06d.oCreating library file: %s %X%P: bfd_openr %s: %E %X%P: bfd_close %s: %E (data)%X%P: open %s: %E %s is already loaded .drectverel: %s _NULL_THUNK_DATA__builtin__IMPORT_DESCRIPTOR_dllcrt1.odllcrt2.ogcrt0.ogcrt1.ogcrt2.ocrtbegin.ocrtend.olibcygwinlibgcclibgcc_slibstdc++libmingw32libmingwexlibg2clibsupc++libobjclibgcjlibmsvcrtlibmsvcrt-oslibucrtlibucrtbasepe-bigobj-x86-64pei-shlpe-shlpei-mipspe-mipspei-arm-littlepe-arm-littlepei-arm-wince-littlepe-arm-wince-littlepei-aarch64-littlepe-aarch64-little_NULL_IMPORT_DESCRIPTORcygwin_crt0DllMainDllEntryPoint_cygwin_dll_entry_cygwin_crt0_common_cygwin_noncygwin_dll_entrycygwin_premain0cygwin_premain1cygwin_premain2cygwin_premain3do_pseudo_reloc_impure_ptr_fmodeenviron__dso_handle_DllMainCRTStartup@feat.00pe-bigobj-i386DllMain@12DllEntryPoint@0_cygwin_dll_entry@12_cygwin_crt0_common@8cygwin_attach_dll""pex_get_status failedclosevforkdup2execvpexecv: error trying to exec '': waitXXXXXXclosing pipeline input fileopen temporary filepipeline already completepipeopen temporary output fileopen error filewbrb/tmpTMPDIRTMPTEMP%P:%s: file format not recognized; treating as linker script Reducing stack by rule %d (line %d): %F%P: unrecognised keyword in MRI style script '%s' %X%P:%pS: unknown phdr type `%s' (try integer literal) %X%P:%pS: PHDRS syntax error at `%s' %F%s: file not recognized: %E %P:%pS: ignoring invalid character `%s'%s out of dynamic memory in yyensure_buffer_stack()out of dynamic memory in yy_create_buffer()fatal flex scanner internal error--end of buffer missedfatal error - scanner input buffer overflow%F%P: read in flex scanner failed out of dynamic memory in yy_get_next_buffer()fatal flex scanner internal error--no action foundout of dynamic memory in yy_scan_buffer()out of dynamic memory in yy_scan_bytes()%F:includes nested too deeply %F%P: invalid hex number `%s' %F%P: Error: unable to disambiguate: %s (did you mean -%s ?) %P: Warning: grouped short command line options are deprecated: %s %F%P: use the --help option for usage information %F%P: unrecognized -a option `%s' %F%P: unrecognized -assert option `%s' %F%P: unknown demangling style `%s' %s: emulation specific options: --ld-generated-unwind-info Generate exception handling info for PLT --no-ld-generated-unwind-info Don't generate exception handling info for PLT --build-id[=STYLE] Generate build ID note --package-metadata[=JSON] Generate package metadata note --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi|zstd] Compress DWARF debug sections Default: %s -z common-page-size=SIZE Set common page size to SIZE -z max-page-size=SIZE Set maximum page size to SIZE -z defs Report unresolved symbols in object files -z undefs Ignore unresolved symbols in object files -z muldefs Allow multiple definitions -z stack-size=SIZE Set size of stack segment -z execstack Mark executable as requiring executable stack -z noexecstack Mark executable as not requiring executable stack --warn-execstack-objects Generate a warning if an object file requests an executable stack --warn-execstack Generate a warning if creating an executable stack (default) --no-warn-execstack Do not generate a warning if creating an executable stack --error-execstack Turn warnings about executable stacks into errors --no-error-execstack Do not turn warnings about executable stacks into errors --warn-rwx-segments Generate a warning if a LOAD segment has RWX permissions (default) --no-warn-rwx-segments Do not generate a warning if a LOAD segments has RWX permissions --error-rwx-segments Turn warnings about loadable RWX segments into errors --no-error-rwx-segments Do not turn warnings about loadable RWX segments into errors -z unique-symbol Avoid duplicated local symbol names -z nounique-symbol Keep duplicated local symbol names (default) -z globalaudit Mark executable requiring global auditing -z start-stop-gc Enable garbage collection on __start/__stop -z nostart-stop-gc Don't garbage collect __start/__stop (default) -z start-stop-visibility=V Set visibility of built-in __start/__stop symbols to DEFAULT, PROTECTED, HIDDEN or INTERNAL -z sectionheader Generate section header (default) -z nosectionheader Do not generate section header --audit=AUDITLIB Specify a library to use for auditing -Bgroup Selects group name lookup rules for DSO --disable-new-dtags Disable new dynamic tags --enable-new-dtags Enable new dynamic tags --eh-frame-hdr Create .eh_frame_hdr section --no-eh-frame-hdr Do not create .eh_frame_hdr section --exclude-libs=LIBS Make all symbols in LIBS hidden --hash-style=STYLE Set hash style to sysv/gnu/both. Default: -P AUDITLIB, --depaudit=AUDITLIB Specify a library to use for auditing dependencies -z combreloc Merge dynamic relocs into one section and sort -z nocombreloc Don't merge dynamic relocs into one section -z global Make symbols in DSO available for subsequently loaded objects -z initfirst Mark DSO to be initialized first at runtime -z interpose Mark object to interpose all DSOs but executable -z unique Mark DSO to be loaded at most once by default, and only in the main namespace -z nounique Don't mark DSO as a loadable at most once -z lazy Mark object lazy runtime binding (default) -z loadfltr Mark object requiring immediate process -z nocopyreloc Don't create copy relocs -z nodefaultlib Mark object not to use default search paths -z nodelete Mark DSO non-deletable at runtime -z nodlopen Mark DSO not available to dlopen -z nodump Mark DSO not available to dldump -z now Mark object non-lazy runtime binding -z origin Mark object requiring immediate $ORIGIN processing at runtime -z relro Create RELRO program header (default) -z norelro Don't create RELRO program header -z separate-code Create separate code program header (default) -z noseparate-code Don't create separate code program header -z common Generate common symbols with STT_COMMON type -z nocommon Generate common symbols with STT_OBJECT type -z text Treat DT_TEXTREL in output as error (default) -z text Treat DT_TEXTREL in output as error -z notext Don't treat DT_TEXTREL in output as error (default) -z textoff Don't treat DT_TEXTREL in output as error (default) -z notext Don't treat DT_TEXTREL in output as error -z textoff Don't treat DT_TEXTREL in output as error %F%P: bad --unresolved-symbols option: %s %F%P: unrecognised option: %s %F%P: -r and %s may not be used together %P: SONAME must not be empty string; keeping previous one %F%P: invalid common section sorting option: %s %F%P: invalid section sorting option: %s %F%P: invalid argument to option "--section-start" %F%P: missing argument(s) to option "--section-start" %F%P: group ended before it began (--help for usage) %F%P: failed to add remap file %s %F%P: invalid argument to option --remap-inputs %F%P: invalid cache memory size: %s %X%P: --hash-size needs a numeric argument %F%P: no state pushed before popping %F%P: invalid argument to option "--orphan-handling" %F%P: bad --ctf-share-types option: %s %P: no file/directory name provided for map output; ignored %P: cannot stat linker map file: %E %P: linker map file is not a regular file %P%F: cannot create name for linker map file: %E %P: SONAME must not be empty string; ignored %P: missing --end-group; added as last command line option %F%P: -r and -z nosectionheader may not be used together %F%P: -F may not be used without -shared %F%P: -f may not be used without -shared Shared library control for HP/UX compatibilitySpecify target for following input filesForce common symbols to be definedForce group members out of groupsUndo the effect of --export-dynamicEnable support of non-contiguous memory regionsenable-non-contiguous-regions-warningsEnable warnings when --enable-non-contiguous-regions may cause unexpected behaviourDisable the LINKER_VERSION linker script directiveEnable the LINKER_VERSION linker script directiveAuxiliary filter for shared object symbol tableFilter for shared object symbol tableSmall data size (if no size, same as --shared)Set internal name of shared librarySet PROGRAM as the dynamic linker to useProduce an executable with no program interpreter headerAdd DIRECTORY to library search pathOverride the default sysroot locationPrint map file on standard outputDo not page align data, do not make text readonlyPage align data, make text readonlySend arg to last-loaded pluginIgnored for GCC LTO option compatibilityIgnored for GCC linker option compatibilityIgnored for gold option compatibilityIgnored for SVR4 compatibilityGenerate relocations in final outputJust link symbols (if directory, same as --rpath)Provide a FILE containing input remapingsRemap input files matching PATTERN to FILEStrip symbols in discarded sectionsDo not strip symbols in discarded sectionsStart with undefined reference to SYMBOLRequire SYMBOL be defined in the final outputDon't merge input [SECTION | orphan] sectionsBuild global constructor/destructor tablesPrint version and emulation informationDiscard temporary local symbols (default)Don't discard any local symbolsDefault search path for Solaris compatibilityAccept input files whose architecture cannot be determinedReject input files whose architecture is unknownOnly set DT_NEEDED for following dynamic libs if usedAlways set DT_NEEDED for dynamic libraries mentioned on the command lineIgnored for SunOS compatibilityDo not link against shared librariesDon't bind global references locallyBind global references locallyBind global function references locallyCheck section addresses for overlaps (default)Do not check section addresses for overlapsCopy DT_NEEDED links mentioned inside DSOs that followDo not copy DT_NEEDED links mentioned inside DSOs that followDemangle symbol names [using STYLE]Do not allow multiple definitions with symbols included in filename invoked by -R or --just-symbolsDo not treat warnings as errors (default)Force generation of file with .exe suffixRemove unused sections (on some targets)Don't remove unused sections (default)List removed unused sections on stderrDo not list removed unused sectionsKeep exported symbols when removing unused sectionsSet default hash table size close to Write a linker map to FILE or DIR/.mapUse less memory and more disk I/ODo not allow unresolved references in object filesDo not display any warning or error messagesAllow unresolved references in shared librariesDo not allow unresolved references in shared libsProvide a script to help with undefined symbol errorsCreate default symbol version for imported symbolsDon't warn about mismatched input filesDon't warn on finding an incompatible libraryCreate an output file even if errors occurOnly use library directories specified on the command lineIgnored for Linux compatibilityReduce memory overheads, possibly taking much longerSet the maximum cache size to SIZE bytesReduce code size by using target specific optimizationsDo not use relaxation techniques to reduce code sizeKeep only symbols listed in FILESet runtime shared library search pathSet link time shared library search pathCreate a position independent executableCreate a position dependent executable (default)Sort common symbols by alignment [in specified order]Sort sections by name or maximum alignmentHow many tags to reserve in .dynamic sectionSplit output sections every SIZE octetsSplit output sections every COUNT relocsDisplay target specific optionsUse same format as native linkerHow to handle unresolved symbols. is: ignore-all, report-all, ignore-in-object-files, ignore-in-shared-libsOutput lots of information during linkRead version information scriptTake export symbols list from .exports, using SYMBOL as the version.Add data symbols to dynamic listUse C++ operator new/delete dynamic listRead export dynamic symbol listWarn about duplicate common symbolsWarn if global constructors/destructors are seenWarn if the multiple GP values are usedWarn only once per undefined symbolWarn if start of section changes due to alignmentWarn if output has DT_TEXTREL (default)Warn if an object has alternate ELF machine codeReport unresolved symbols as warningsReport unresolved symbols as errorsInclude all objects from following archivesUse wrapper functions for SYMBOLUnresolved SYMBOL will not cause an error or warningPush state of flags governing input file handlingPop state of flags governing input file handlingControl how orphan sections are handled.Show discarded sections in map file output (default)Do not show discarded sections in map file outputShow local symbols in map file outputDo not show local symbols in map file output (default)Emit names and types of static variables in CTFDo not emit names and types of static variables in CTFHow to share CTF types between translation units. is: share-unconflicted (default), share-duplicated%X%P: address 0x%v of %pB section `%s' is not within region `%s' %X%P: %pB section `%s' will not fit in region `%s' CTF error: cannot get CTF errors: `%s' %F%P: bfd_link_hash_lookup failed: %E %P: invalid origin for memory region %s %P: invalid length for memory region %s %P: warning: CTF section emission failed; output will have no CTF section: %s %F%P: could not define common symbol `%pT': %E Common symbol size file %F%P: invalid reloc statement SORT_BY_NAME(SORT_BY_ALIGNMENT(SORT_BY_ALIGNMENT(SORT_BY_NAME(%P:%pS: warning: --enable-non-contiguous-regions makes section `%pA' from `%pB' match /DISCARD/ clause. %P:%pS: warning: --enable-non-contiguous-regions may change behaviour for section `%pA' from `%pB' (assigned to %pA, but additional match: %pA) %P:%pS: warning: redeclaration of memory region `%s' %P:%pS: warning: memory region `%s' not declared %X%P:%pS: section has both a load address and a load region %F%P:%pS: non constant or forward reference address expression for section %s %X%P: internal error on COFF shared library section %s %F%P: error: no memory region specified for loadable section `%s' %P: warning: no memory region specified for loadable section `%s' %P: warning: start of section %s changed by %ld %P: warning: dot moved backwards before `%s' %F%P: can't relax section: %E %F%P: Output section `%pA' not large enough for the linker-created stubs section `%pA'. %F%P: Relaxation not supported with --enable-non-contiguous-regions (section `%pA' would overflow `%pA' after it changed size). %F%P:%pS: error: alias for default memory region %F%P:%pS: error: memory region `%s' for alias `%s' does not exist %F%P:%pS: error: redefinition of memory region alias `%s' %F%P: failed creating section `%s': %E %F%P: can not create hash table: %E %F%P: illegal use of `%s' section %F%P: output format %s cannot represent section called %s: %E warning: INSERT statement in linker script is incompatible with --enable-non-contiguous-regions. %F%P: %s not found for insert There are no discarded input sections Linker script and memory map %F%P: invalid type for output section `%s' %F%P: input file '%s' is the same as output file %P: warning: could not find any targets that match endianness requirement %F%P: cannot open output file %s: %E %F%P: %s: can not make object file: %E %F%P: %s: can not set architecture: %E %F%P: invalid character %c (%d) in flags %P: %pB: file not recognized: %E; matching formats:%F%P: %pB: file not recognized: %E %F%P: %pB: member %pB in archive is not an object %F%P: %pB: error adding symbols: %E %P: warning: %s contains output sections; did you forget -T? %F%P:%pS: error: align with input and explicit align specified %X%P:%pS: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them %X%P: unknown language `%s' in version information %X%P: anonymous version tag cannot be combined with other version tags %X%P: duplicate version tag `%s' %X%P: duplicate expression `%s' in version information %F%P: %s: plugin reported error after all symbols read As-needed library included to satisfy reference by file (symbol) %P: warning: CTF section in %pB not loaded; its types will be discarded: %s %P: warning: CTF output not created: `%s' %F%P: relocatable linking with relocations from format %s (%pB) to format %s (%pB) is not supported %X%P: %s architecture of input file `%pB' is incompatible with %s output %X%P: failed to merge target specific data of file %pB %X%P: unable to read .exports section contents %X%P: error: unplaced orphan section `%pA' from `%pB' %P: warning: orphan section `%pA' from `%pB' being placed in section `%s' %P: warning: CTF section in %pB cannot be linked: `%s' %P: warning: CTF linking failed; output will have no CTF section: %s %F%P: no sections assigned to phdrs %F%P: bfd_record_phdr failed: %E %X%P: section `%s' assigned to non-existent phdr `%s' %X%P: section %s VMA wraps around address space %X%P: section %s LMA wraps around address space %X%P: section %s LMA [%V,%V] overlaps section %s LMA [%V,%V] %X%P: section %s VMA [%V,%V] overlaps section %s VMA [%V,%V] %X%P: region `%s' overflowed by %lu bytes %X%P: region `%s' overflowed by %lu byte %P: warning: --enable-non-contiguous-regions discards section `%pA' from `%pB' %X%P: required symbol `%s' not defined %F%P: --gc-sections requires a defined symbol root specified by -e or -u %F%P: %s: can't set start address %F%P: can't set start address %P: warning: cannot find entry symbol %s; defaulting to %V %P: warning: cannot find entry symbol %s; not setting start address %X%P: unable to find version dependency `%s' Memory region Used Size Region Size %%age Used %X%P: different relocs used in set %s %X%P: different object file formats composing set %s %X%P: %s does not support reloc %s for set %s %X%P: special section %s does not support reloc %s for set %s %X%P: unsupported size %d for set %s %X%H: reloc refers to symbol `%pT' which is not being output %X%H: dangerous relocation: %s %P: %C: warning: multiple definition of `%pT'%X%P: %C: multiple definition of `%pT'%P: disabling relaxation; it will not work with multiple definitions %F%P: %pB: could not read symbols: %E %pI: no new IR symbols to claim Archive member included to satisfy reference by file (symbol) additional relocation overflows omitted from the output relocation truncated to fit: %s against undefined symbol `%pT' relocation truncated to fit: %s against symbol `%pT' defined in %pA section in %pB relocation truncated to fit: %s against `%pT'%F%P: %pB: could not read relocs: %E %P: warning: global constructor %s used %P: %pB: warning: definition of `%pT' overriding common from %pB %P: %pB: warning: definition of `%pT' overriding common %P: %pB: warning: common of `%pT' overridden by definition from %pB %P: %pB: warning: common of `%pT' overridden by definition %P: %pB: warning: common of `%pT' overridden by larger common from %pB %P: %pB: warning: common of `%pT' overridden by larger common %P: %pB: warning: common of `%pT' overriding smaller common from %pB %P: %pB: warning: common of `%pT' overriding smaller common %P: %pB and %pB: warning: multiple common of `%pT' %P: %pB: warning: multiple common of `%pT' %F%P: BFD backend error: BFD_RELOC_CTOR unsupported /opt/rh/gcc-toolset-14/root/usr/share/locale%F%P: fatal error: libbfd ABI mismatch %X%P: can't set BFD default target to `%s': %E ================================================== %F%P: --no-define-common may not be used without -shared %F%P: cannot open map file %s: %E %F%P: cannot open dependency file %s: %E %P: link errors found, deleting executable `%s' %F%P: %s: final close failed: %E %F%P: unable to open for source of copy `%s' %F%P: unable to open for destination of copy `%s' %s: total time in link: %ld.%06ld %F%P: bfd_hash_table_init failed: %E %F%P: bfd_hash_lookup failed: %E %P: About to run error handling script '%s' with arguments: '%s' '%s' %P: Failed to run error handling script '%s', reason: %X%P: %H: undefined reference to `%pT' %P: %H: warning: undefined reference to `%pT' %X%P: %D: more undefined references to `%pT' follow %P: %D: warning: more undefined references to `%pT' follow %X%P: %pB: undefined reference to `%pT' %P: %pB: warning: undefined reference to `%pT' %X%P: %pB: more undefined references to `%pT' follow %P: %pB: warning: more undefined references to `%pT' follow %X%P: error: duplicate retain-symbols-file %F%P: bfd_hash_lookup for insertion failed: %E %P: `-retain-symbols-file' overrides `-s' and `-S' %F%P: bfd_new_link_order failed %F%P: cannot create split section name for %s %F%P: clone section failed: %E %F%P: bfd_hash_allocate failed creating symbol %s %P: warning: address of `%s' isn't multiple of maximum page size %F%P:%pS can not PROVIDE assignment to location counter %F%P:%pS invalid assignment to location counter %F%P:%pS assignment to location counter invalid outside of SECTIONS %F%P:%pS cannot move location counter backwards (from %V to %V) %F%P:%s: hash creation failed %F%P: bfd_hash_lookup failed creating symbol %s %X%P:%pS: unresolvable symbol `%s' referenced in expression %F%P:%pS: undefined symbol `%s' referenced in expression %F%P:%pS: undefined section `%s' referenced in expression %F%P:%pS: undefined MEMORY region `%s' referenced in expression %F%P:%pS: unknown constant `%s' referenced in expression %F%P:%pS: nonconstant expression for %s %P: unrecognised emulation mode: %s no emulation specific options. Copyright (C) 2023 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) a later version. This program has absolutely no warranty. %P: internal error: aborting at %s:%d in %s %P: internal error: aborting at %s:%d %F%P: malformed remap file entry: %s remap input file '%s' to '%s' based upon pattern '%s' remove input file '%s' based upon pattern '%s' remap input file '%s' to '%s' %F%P: error: linker script file '%s' appears multiple times /opt/rh/gcc-toolset-14/root/usr/lib/opt/rh/gcc-toolset-14/root/usr/bin%F%P: cannot open linker script file %s: %E %F%P: invalid BFD target `%s' %P: skipping incompatible %s when searching for %s %F%P: attempted static link of dynamic object `%s' %P: note to link with %s use -l:%s or rename it to lib%s %F%P: cannot represent machine `%s' %P: symbol `%pT' missing from main hash table %X%P: %H: prohibited cross reference from %s to `%pT' in %s %X%P: bfd_hash_table_init of cref table failed: %E %X%P: cref_hash_lookup failed: %E %F%P: plugin_strdup failed to allocate memory: %s %F%P: unsupported input file size: %s (%ld bytes) %F%P: %s: non-ELF symbol in ELF BFD! %F%P: unknown ELF symbol visibility: %d! %F%P: could not create dummy IR bfd: %E %F%P: plugin failed to allocate memory for input: %s %F%P: %s: plugin reported error claiming file %F%P: %s: plugin symbol table corrupt (sym type %d) unknown LTO visibility value %x%P: %pB: symbol `%s' definition: %s, visibility: %s, resolution: %s %F%P: %s: error loading plugin: %s %P: %s: error in plugin cleanup: %d (ignored) /* Script for -Ur */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) /* For some reason, the Solaris linker makes bad executables if gld -r is used and the intermediate file has sections starting at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld bug. But for now assigning the zero vmas works. */ SECTIONS { .interp 0 : { *(.interp) } .note.gnu.build-id 0: { *(.note.gnu.build-id) } .hash 0 : { *(.hash) } .gnu.hash 0 : { *(.gnu.hash) } .dynsym 0 : { *(.dynsym) } .dynstr 0 : { *(.dynstr) } .gnu.version 0 : { *(.gnu.version) } .gnu.version_d 0: { *(.gnu.version_d) } .gnu.version_r 0: { *(.gnu.version_r) } .rela.init 0 : { *(.rela.init) } .rela.text 0 : { *(.rela.text) } .rela.fini 0 : { *(.rela.fini) } .rela.rodata 0 : { *(.rela.rodata) } .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) } .rela.data 0 : { *(.rela.data) } .rela.tdata 0 : { *(.rela.tdata) } .rela.tbss 0 : { *(.rela.tbss) } .rela.ctors 0 : { *(.rela.ctors) } .rela.dtors 0 : { *(.rela.dtors) } .rela.got 0 : { *(.rela.got) } .rela.bss 0 : { *(.rela.bss) } .rela.ldata 0 : { *(.rela.ldata) } .rela.lbss 0 : { *(.rela.lbss) } .rela.lrodata 0 : { *(.rela.lrodata) } .rela.ifunc 0 : { *(.rela.ifunc) } .rela.plt 0 : { *(.rela.plt) } .relr.dyn : { *(.relr.dyn) } .init 0 : { KEEP (*(SORT_NONE(.init))) } .plt 0 : { *(.plt) } .plt.got 0 : { *(.plt.got) } .plt.sec 0 : { *(.plt.sec) } .text 0 : { *(.text .stub) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini 0 : { KEEP (*(SORT_NONE(.fini))) } .rodata 0 : { *(.rodata) } .rodata1 0 : { *(.rodata1) } .eh_frame_hdr 0 : { *(.eh_frame_hdr) } .eh_frame 0 : ONLY_IF_RO { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RO { *(.sframe) } .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) } .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) } /* Exception handling */ .eh_frame 0 : ONLY_IF_RW { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RW { *(.sframe) } .gnu_extab 0 : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) } .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) } /* Thread Local Storage sections */ .tdata 0 : { *(.tdata) } .tbss 0 : { *(.tbss) } .jcr 0 : { KEEP (*(.jcr)) } .dynamic 0 : { *(.dynamic) } .got 0 : { *(.got) } .got.plt 0 : { *(.got.plt) } .data 0 : { *(.data) SORT(CONSTRUCTORS) } .data1 0 : { *(.data1) } .bss 0 : { *(.bss) } .lbss 0 : { *(.lbss) } .lrodata 0 : { *(.lrodata) } .ldata 0 : { *(.ldata) } /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } } /* Script for -r */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) /* For some reason, the Solaris linker makes bad executables if gld -r is used and the intermediate file has sections starting at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld bug. But for now assigning the zero vmas works. */ SECTIONS { .interp 0 : { *(.interp) } .note.gnu.build-id 0: { *(.note.gnu.build-id) } .hash 0 : { *(.hash) } .gnu.hash 0 : { *(.gnu.hash) } .dynsym 0 : { *(.dynsym) } .dynstr 0 : { *(.dynstr) } .gnu.version 0 : { *(.gnu.version) } .gnu.version_d 0: { *(.gnu.version_d) } .gnu.version_r 0: { *(.gnu.version_r) } .rela.init 0 : { *(.rela.init) } .rela.text 0 : { *(.rela.text) } .rela.fini 0 : { *(.rela.fini) } .rela.rodata 0 : { *(.rela.rodata) } .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) } .rela.data 0 : { *(.rela.data) } .rela.tdata 0 : { *(.rela.tdata) } .rela.tbss 0 : { *(.rela.tbss) } .rela.ctors 0 : { *(.rela.ctors) } .rela.dtors 0 : { *(.rela.dtors) } .rela.got 0 : { *(.rela.got) } .rela.bss 0 : { *(.rela.bss) } .rela.ldata 0 : { *(.rela.ldata) } .rela.lbss 0 : { *(.rela.lbss) } .rela.lrodata 0 : { *(.rela.lrodata) } .rela.ifunc 0 : { *(.rela.ifunc) } .rela.plt 0 : { *(.rela.plt) } .relr.dyn : { *(.relr.dyn) } .init 0 : { KEEP (*(SORT_NONE(.init))) } .plt 0 : { *(.plt) } .plt.got 0 : { *(.plt.got) } .plt.sec 0 : { *(.plt.sec) } .text 0 : { *(.text .stub) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini 0 : { KEEP (*(SORT_NONE(.fini))) } .rodata 0 : { *(.rodata) } .rodata1 0 : { *(.rodata1) } .eh_frame_hdr 0 : { *(.eh_frame_hdr) } .eh_frame 0 : ONLY_IF_RO { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RO { *(.sframe) } .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) } .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) } /* Exception handling */ .eh_frame 0 : ONLY_IF_RW { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RW { *(.sframe) } .gnu_extab 0 : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) } .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) } /* Thread Local Storage sections */ .tdata 0 : { *(.tdata) } .tbss 0 : { *(.tbss) } .jcr 0 : { KEEP (*(.jcr)) } .dynamic 0 : { *(.dynamic) } .got 0 : { *(.got) } .got.plt 0 : { *(.got.plt) } .data 0 : { *(.data) } .data1 0 : { *(.data1) } .bss 0 : { *(.bss) } .lbss 0 : { *(.lbss) } .lrodata 0 : { *(.lrodata) } .ldata 0 : { *(.ldata) } /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } } /* Script for -N */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = .; /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -n */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc -z separate-code -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc -z separate-code -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc -z separate-code -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Default linker script, for normal executables */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 64 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(64 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 64 / 8 : 1); } . = ALIGN(64 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } -z noextern-protected-data Do not treat protected data symbol as external -z indirect-extern-access Enable indirect external access -z noindirect-extern-access Disable indirect external access (default) -z dynamic-undefined-weak Make undefined weak symbols dynamic -z nodynamic-undefined-weak Do not make undefined weak symbols dynamic -z noreloc-overflow Disable relocation overflow check -z call-nop=PADDING Use PADDING as 1-byte NOP for branch -z ibtplt Generate IBT-enabled PLT entries -z ibt Generate GNU_PROPERTY_X86_FEATURE_1_IBT -z shstk Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK -z cet-report=[none|warning|error] (default: none) Report missing IBT and SHSTK properties -z report-relative-reloc Report relative relocations -z x86-64-{baseline|v[234]} Mark x86-64-{baseline|v[234]} ISA level as needed -z lam-u48 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U48 -z lam-u48-report=[none|warning|error] (default: none) Report missing LAM_U48 property -z lam-u57 Generate GNU_PROPERTY_X86_FEATURE_1_LAM_U57 -z lam-u57-report=[none|warning|error] (default: none) Report missing LAM_U57 property -z lam-report=[none|warning|error] (default: none) Report missing LAM_U48 and LAM_U57 properties -z pack-relative-relocs Pack relative relocations -z nopack-relative-relocs Do not pack relative relocations (default) /opt/rh/gcc-toolset-14/root/usr%X%P: .eh_frame/.stab edit: %E %F%P: --compress-debug-sections=zstd: ld is not built with zstd support %F%P: invalid --compress-debug-sections option: `%s' %F%P: invalid hash style `%s' %F%P: invalid maximum page size `%s' %F%P: invalid common page size `%s' %F%P: invalid stack size `%s' start-stop-visibility=internalstart-stop-visibility=protected%F%P: invalid visibility in `-z %s'; must be default, internal, hidden, or protected%F%P: invalid number for -z call-nop=prefix-: %s %F%P: invalid number for -z call-nop=suffix-: %s %F%P: unsupported option: -z %s %F%P: invalid option for -z cet-report=: %s %F%P: invalid x86-64 ISA level: %s %F%P: invalid option for -z lam-u48-report=: %s %F%P: invalid option for -z lam-u57-report=: %s %F%P: invalid option for -z lam-report=: %s /* Script for -Ur */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) /* For some reason, the Solaris linker makes bad executables if gld -r is used and the intermediate file has sections starting at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld bug. But for now assigning the zero vmas works. */ SECTIONS { .interp 0 : { *(.interp) } .note.gnu.build-id 0: { *(.note.gnu.build-id) } .hash 0 : { *(.hash) } .gnu.hash 0 : { *(.gnu.hash) } .dynsym 0 : { *(.dynsym) } .dynstr 0 : { *(.dynstr) } .gnu.version 0 : { *(.gnu.version) } .gnu.version_d 0: { *(.gnu.version_d) } .gnu.version_r 0: { *(.gnu.version_r) } .rela.init 0 : { *(.rela.init) } .rela.text 0 : { *(.rela.text) } .rela.fini 0 : { *(.rela.fini) } .rela.rodata 0 : { *(.rela.rodata) } .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) } .rela.data 0 : { *(.rela.data) } .rela.tdata 0 : { *(.rela.tdata) } .rela.tbss 0 : { *(.rela.tbss) } .rela.ctors 0 : { *(.rela.ctors) } .rela.dtors 0 : { *(.rela.dtors) } .rela.got 0 : { *(.rela.got) } .rela.bss 0 : { *(.rela.bss) } .rela.ldata 0 : { *(.rela.ldata) } .rela.lbss 0 : { *(.rela.lbss) } .rela.lrodata 0 : { *(.rela.lrodata) } .rela.ifunc 0 : { *(.rela.ifunc) } .rela.plt 0 : { *(.rela.plt) } .relr.dyn : { *(.relr.dyn) } .init 0 : { KEEP (*(SORT_NONE(.init))) } .plt 0 : { *(.plt) } .plt.got 0 : { *(.plt.got) } .plt.sec 0 : { *(.plt.sec) } .text 0 : { *(.text .stub) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini 0 : { KEEP (*(SORT_NONE(.fini))) } .rodata 0 : { *(.rodata) } .rodata1 0 : { *(.rodata1) } .eh_frame_hdr 0 : { *(.eh_frame_hdr) } .eh_frame 0 : ONLY_IF_RO { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RO { *(.sframe) } .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) } .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) } /* Exception handling */ .eh_frame 0 : ONLY_IF_RW { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RW { *(.sframe) } .gnu_extab 0 : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) } .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) } /* Thread Local Storage sections */ .tdata 0 : { *(.tdata) } .tbss 0 : { *(.tbss) } .jcr 0 : { KEEP (*(.jcr)) } .dynamic 0 : { *(.dynamic) } .got 0 : { *(.got) } .got.plt 0 : { *(.got.plt) } .data 0 : { *(.data) SORT(CONSTRUCTORS) } .data1 0 : { *(.data1) } .bss 0 : { *(.bss) } .lbss 0 : { *(.lbss) } .lrodata 0 : { *(.lrodata) } .ldata 0 : { *(.ldata) } /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } } /* Script for -r */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) /* For some reason, the Solaris linker makes bad executables if gld -r is used and the intermediate file has sections starting at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld bug. But for now assigning the zero vmas works. */ SECTIONS { .interp 0 : { *(.interp) } .note.gnu.build-id 0: { *(.note.gnu.build-id) } .hash 0 : { *(.hash) } .gnu.hash 0 : { *(.gnu.hash) } .dynsym 0 : { *(.dynsym) } .dynstr 0 : { *(.dynstr) } .gnu.version 0 : { *(.gnu.version) } .gnu.version_d 0: { *(.gnu.version_d) } .gnu.version_r 0: { *(.gnu.version_r) } .rela.init 0 : { *(.rela.init) } .rela.text 0 : { *(.rela.text) } .rela.fini 0 : { *(.rela.fini) } .rela.rodata 0 : { *(.rela.rodata) } .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) } .rela.data 0 : { *(.rela.data) } .rela.tdata 0 : { *(.rela.tdata) } .rela.tbss 0 : { *(.rela.tbss) } .rela.ctors 0 : { *(.rela.ctors) } .rela.dtors 0 : { *(.rela.dtors) } .rela.got 0 : { *(.rela.got) } .rela.bss 0 : { *(.rela.bss) } .rela.ldata 0 : { *(.rela.ldata) } .rela.lbss 0 : { *(.rela.lbss) } .rela.lrodata 0 : { *(.rela.lrodata) } .rela.ifunc 0 : { *(.rela.ifunc) } .rela.plt 0 : { *(.rela.plt) } .relr.dyn : { *(.relr.dyn) } .init 0 : { KEEP (*(SORT_NONE(.init))) } .plt 0 : { *(.plt) } .plt.got 0 : { *(.plt.got) } .plt.sec 0 : { *(.plt.sec) } .text 0 : { *(.text .stub) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini 0 : { KEEP (*(SORT_NONE(.fini))) } .rodata 0 : { *(.rodata) } .rodata1 0 : { *(.rodata1) } .eh_frame_hdr 0 : { *(.eh_frame_hdr) } .eh_frame 0 : ONLY_IF_RO { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RO { *(.sframe) } .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) } .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) } /* Exception handling */ .eh_frame 0 : ONLY_IF_RW { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RW { *(.sframe) } .gnu_extab 0 : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) } .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) } /* Thread Local Storage sections */ .tdata 0 : { *(.tdata) } .tbss 0 : { *(.tbss) } .jcr 0 : { KEEP (*(.jcr)) } .dynamic 0 : { *(.dynamic) } .got 0 : { *(.got) } .got.plt 0 : { *(.got.plt) } .data 0 : { *(.data) } .data1 0 : { *(.data1) } .bss 0 : { *(.bss) } .lbss 0 : { *(.lbss) } .lrodata 0 : { *(.lrodata) } .ldata 0 : { *(.ldata) } /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } } /* Script for -N */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = .; /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -n */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc -z separate-code -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc -z separate-code -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc -z separate-code -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) *(.rela.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.dyn : { *(.rela.init) *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) *(.rela.fini) *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) *(.rela.ctors) *(.rela.dtors) *(.rela.got) *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Default linker script, for normal executables */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64", "elf32-x86-64") OUTPUT_ARCH(i386:x64-32) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/libx32"); SEARCH_DIR("=/usr/local/libx32"); SEARCH_DIR("=/libx32"); SEARCH_DIR("=/usr/libx32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rela.init : { *(.rela.init) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rela.fini : { *(.rela.fini) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rela.ctors : { *(.rela.ctors) } .rela.dtors : { *(.rela.dtors) } .rela.got : { *(.rela.got) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } .rela.ifunc : { *(.rela.ifunc) } .rela.plt : { *(.rela.plt) PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } .lbss : { *(.dynlbss) *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -Ur */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) /* For some reason, the Solaris linker makes bad executables if gld -r is used and the intermediate file has sections starting at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld bug. But for now assigning the zero vmas works. */ SECTIONS { .interp 0 : { *(.interp) } .note.gnu.build-id 0: { *(.note.gnu.build-id) } .hash 0 : { *(.hash) } .gnu.hash 0 : { *(.gnu.hash) } .dynsym 0 : { *(.dynsym) } .dynstr 0 : { *(.dynstr) } .gnu.version 0 : { *(.gnu.version) } .gnu.version_d 0: { *(.gnu.version_d) } .gnu.version_r 0: { *(.gnu.version_r) } .rel.init 0 : { *(.rel.init) } .rel.text 0 : { *(.rel.text) } .rel.fini 0 : { *(.rel.fini) } .rel.rodata 0 : { *(.rel.rodata) } .rel.data.rel.ro 0 : { *(.rel.data.rel.ro) } .rel.data 0 : { *(.rel.data) } .rel.tdata 0 : { *(.rel.tdata) } .rel.tbss 0 : { *(.rel.tbss) } .rel.ctors 0 : { *(.rel.ctors) } .rel.dtors 0 : { *(.rel.dtors) } .rel.got 0 : { *(.rel.got) } .rel.bss 0 : { *(.rel.bss) } .rel.ifunc 0 : { *(.rel.ifunc) } .rel.plt 0 : { *(.rel.plt) } .relr.dyn : { *(.relr.dyn) } .init 0 : { KEEP (*(SORT_NONE(.init))) } .plt 0 : { *(.plt) } .plt.got 0 : { *(.plt.got) } .plt.sec 0 : { *(.plt.sec) } .text 0 : { *(.text .stub) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini 0 : { KEEP (*(SORT_NONE(.fini))) } .rodata 0 : { *(.rodata) } .rodata1 0 : { *(.rodata1) } .eh_frame_hdr 0 : { *(.eh_frame_hdr) } .eh_frame 0 : ONLY_IF_RO { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RO { *(.sframe) } .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) } .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) } /* Exception handling */ .eh_frame 0 : ONLY_IF_RW { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RW { *(.sframe) } .gnu_extab 0 : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) } .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) } /* Thread Local Storage sections */ .tdata 0 : { *(.tdata) } .tbss 0 : { *(.tbss) } .jcr 0 : { KEEP (*(.jcr)) } .dynamic 0 : { *(.dynamic) } .got 0 : { *(.got) } .got.plt 0 : { *(.got.plt) } .data 0 : { *(.data) SORT(CONSTRUCTORS) } .data1 0 : { *(.data1) } .bss 0 : { *(.bss) } /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } } /* Script for -r */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) /* For some reason, the Solaris linker makes bad executables if gld -r is used and the intermediate file has sections starting at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld bug. But for now assigning the zero vmas works. */ SECTIONS { .interp 0 : { *(.interp) } .note.gnu.build-id 0: { *(.note.gnu.build-id) } .hash 0 : { *(.hash) } .gnu.hash 0 : { *(.gnu.hash) } .dynsym 0 : { *(.dynsym) } .dynstr 0 : { *(.dynstr) } .gnu.version 0 : { *(.gnu.version) } .gnu.version_d 0: { *(.gnu.version_d) } .gnu.version_r 0: { *(.gnu.version_r) } .rel.init 0 : { *(.rel.init) } .rel.text 0 : { *(.rel.text) } .rel.fini 0 : { *(.rel.fini) } .rel.rodata 0 : { *(.rel.rodata) } .rel.data.rel.ro 0 : { *(.rel.data.rel.ro) } .rel.data 0 : { *(.rel.data) } .rel.tdata 0 : { *(.rel.tdata) } .rel.tbss 0 : { *(.rel.tbss) } .rel.ctors 0 : { *(.rel.ctors) } .rel.dtors 0 : { *(.rel.dtors) } .rel.got 0 : { *(.rel.got) } .rel.bss 0 : { *(.rel.bss) } .rel.ifunc 0 : { *(.rel.ifunc) } .rel.plt 0 : { *(.rel.plt) } .relr.dyn : { *(.relr.dyn) } .init 0 : { KEEP (*(SORT_NONE(.init))) } .plt 0 : { *(.plt) } .plt.got 0 : { *(.plt.got) } .plt.sec 0 : { *(.plt.sec) } .text 0 : { *(.text .stub) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini 0 : { KEEP (*(SORT_NONE(.fini))) } .rodata 0 : { *(.rodata) } .rodata1 0 : { *(.rodata1) } .eh_frame_hdr 0 : { *(.eh_frame_hdr) } .eh_frame 0 : ONLY_IF_RO { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RO { *(.sframe) } .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) } .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) } /* Exception handling */ .eh_frame 0 : ONLY_IF_RW { KEEP (*(.eh_frame)) } .sframe 0 : ONLY_IF_RW { *(.sframe) } .gnu_extab 0 : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) } .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) } /* Thread Local Storage sections */ .tdata 0 : { *(.tdata) } .tbss 0 : { *(.tbss) } .jcr 0 : { KEEP (*(.jcr)) } .dynamic 0 : { *(.dynamic) } .got 0 : { *(.got) } .got.plt 0 : { *(.got.plt) } .data 0 : { *(.data) } .data1 0 : { *(.data1) } .bss 0 : { *(.bss) } /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } } /* Script for -N */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rel.dtors : { *(.rel.dtors) } .rel.got : { *(.rel.got) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rel.ifunc : { *(.rel.ifunc) } .rel.plt : { *(.rel.plt) PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = .; /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -n */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rel.dtors : { *(.rel.dtors) } .rel.got : { *(.rel.got) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rel.ifunc : { *(.rel.ifunc) } .rel.plt : { *(.rel.plt) PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc -z separate-code -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rel.dtors : { *(.rel.dtors) } .rel.got : { *(.rel.got) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rel.ifunc : { *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rel.dtors : { *(.rel.dtors) } .rel.got : { *(.rel.got) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rel.ifunc : { *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc -z separate-code -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -pie -z combreloc -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rel.dtors : { *(.rel.dtors) } .rel.got : { *(.rel.got) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rel.ifunc : { *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rel.dtors : { *(.rel.dtors) } .rel.got : { *(.rel.got) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rel.ifunc : { *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc -z separate-code -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -shared -z combreloc -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS; .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) *(.rel.iplt) } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { KEEP (*(.preinit_array)) } .init_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) } .fini_array : { KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } PROVIDE (_edata = .); PROVIDE (edata = .); . = .; PROVIDE (__bss_start = .); .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); PROVIDE (_end = .); PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc -z relro -z now */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (0, .); .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z combreloc */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.dyn : { *(.rel.init) *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) *(.rel.fini) *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) *(.rel.ctors) *(.rel.dtors) *(.rel.got) *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) *(.rel.ifunc) } .rel.plt : { *(.rel.plt) PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rel.dtors : { *(.rel.dtors) } .rel.got : { *(.rel.got) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rel.ifunc : { *(.rel.ifunc) } .rel.plt : { *(.rel.plt) PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } . = ALIGN(CONSTANT (MAXPAGESIZE)); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(CONSTANT (MAXPAGESIZE)); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Default linker script, for normal executables */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-redhat-linux/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/i386-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x08048000)); . = SEGMENT_START("text-segment", 0x08048000) + SIZEOF_HEADERS; .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rel.dtors : { *(.rel.dtors) } .rel.got : { *(.rel.got) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rel.ifunc : { *(.rel.ifunc) } .rel.plt : { *(.rel.plt) PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .relr.dyn : { *(.relr.dyn) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) *(.iplt) } .plt.got : { *(.plt.got) } .plt.sec : { *(.plt.sec) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RO { *(.sframe) *(.sframe.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .sframe : ONLY_IF_RW { *(.sframe) *(.sframe.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .got : { *(.got) *(.igot) } . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .); .got.plt : { *(.got.plt) *(.igot.plt) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1. */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions. */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2. */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2. */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } /* DWARF 3. */ .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } /* DWARF 5. */ .debug_addr 0 : { *(.debug_addr) } .debug_line_str 0 : { *(.debug_line_str) } .debug_loclists 0 : { *(.debug_loclists) } .debug_macro 0 : { *(.debug_macro) } .debug_names 0 : { *(.debug_names) } .debug_rnglists 0 : { *(.debug_rnglists) } .debug_str_offsets 0 : { *(.debug_str_offsets) } .debug_sup 0 : { *(.debug_sup) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } --base_file Generate a base file for relocatable DLLs --dll Set image base to the default for DLLs --file-alignment Set file alignment --heap Set initial size of the heap --image-base
Set start address of the executable --major-image-version Set version number of the executable --major-os-version Set minimum required OS version --major-subsystem-version Set minimum required OS subsystem version --minor-image-version Set revision number of the executable --minor-os-version Set minimum required OS revision --minor-subsystem-version Set minimum required OS subsystem revision --section-alignment Set section alignment --stack Set size of the initial stack --subsystem [:] Set required OS subsystem [& version] --support-old-code Support interworking with old code --[no-]leading-underscore Set explicit symbol underscore prefix mode --[no-]insert-timestamp Use a real timestamp rather than zero (default) This makes binaries non-deterministic --add-stdcall-alias Export symbols with and without @nn --disable-stdcall-fixup Don't link _sym to _sym@nn --enable-stdcall-fixup Link _sym to _sym@nn without warnings --exclude-symbols sym,sym,... Exclude symbols from automatic export --exclude-all-symbols Exclude all symbols from automatic export --exclude-libs lib,lib,... Exclude libraries from automatic export --exclude-modules-for-implib mod,mod,... Exclude objects, archive members from auto export, place into import library instead --export-all-symbols Automatically export all globals to DLL --kill-at Remove @nn from exported symbols --output-def Generate a .DEF file for the built DLL --warn-duplicate-exports Warn about duplicate exports --compat-implib Create backward compatible import libs; create __imp_ as well --enable-auto-image-base Automatically choose image base for DLLs unless user specifies one --disable-auto-image-base Do not auto-choose image base (default) --dll-search-prefix= When linking dynamically to a dll without an importlib, use .dll in preference to lib.dll --enable-auto-import Do sophisticated linking of _sym to __imp_sym for DATA references --disable-auto-import Do not auto-import DATA items from DLLs --enable-runtime-pseudo-reloc Work around auto-import limitations by adding pseudo-relocations resolved at runtime --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for auto-imported DATA --enable-extra-pep-debug Enable verbose debug output when building or linking to DLLs (esp. auto-import) --enable-long-section-names Use long COFF section names even in executable image files --disable-long-section-names Never use long COFF section names, even in object files --[disable-]high-entropy-va Image is compatible with 64-bit address space layout randomization (ASLR) --[disable-]dynamicbase Image base address may be relocated using address space layout randomization (ASLR) --enable-reloc-section Create the base relocation table --disable-reloc-section Do not create the base relocation table --[disable-]forceinteg Code integrity checks are enforced --[disable-]nxcompat Image is compatible with data execution prevention --[disable-]no-isolation Image understands isolation but do not isolate the image --[disable-]no-seh Image does not use SEH; no SE handler may be called in this image --[disable-]no-bind Do not bind this image --[disable-]wdmdriver Driver uses the WDM model --[disable-]tsaware Image is Terminal Server aware --build-id[=STYLE] Generate build ID %F%P: invalid hex number for PE parameter '%s' %F%P: strange hex info for PE parameter '%s' %F%P: cannot open base file %s %P: warning: bad version number in -subsystem option %F%P: invalid subsystem type %s %P: warning, file alignment > section alignment %P: %H: cannot get section contents - auto-import exception import of 0x%lx(0x%lx) sec_addr=0x%lx%P: warning: --export-dynamic is not supported for PE+ targets, did you mean --export-all-symbols? /* Script for -Ur */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT(pe-x86-64) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-pep/lib"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { .text : { *(.text) . = ALIGN(8); /* Note: we always define __CTOR_LIST__ and ___CTOR_LIST__ here, we do not PROVIDE them. This is because the ctors.o startup code in libgcc defines them as common symbols, with the expectation that they will be overridden by the definitions here. If we PROVIDE the symbols then they will not be overridden and global constructors will not be run. See PR 22762 for more details. This does mean that it is not possible for a user to define their own __CTOR_LIST__ and __DTOR_LIST__ symbols; if they do, the content from those variables are included but the symbols defined here silently take precedence. If they truly need to be redefined, a custom linker script will have to be used. (The custom script can just be a copy of this script with the PROVIDE() qualifiers added). In particular this means that ld -Ur does not work, because the proper __CTOR_LIST__ set by ld -Ur is overridden by a bogus __CTOR_LIST__ set by the final link. See PR 46. */ ___CTOR_LIST__ = .; __CTOR_LIST__ = .; LONG (-1); LONG (-1); KEEP (*(.ctors)); KEEP (*(.ctor)); KEEP (*(SORT_BY_NAME(.ctors.*))); LONG (0); LONG (0); /* See comment about __CTOR_LIST__ above. The same reasoning applies here too. */ ___DTOR_LIST__ = .; __DTOR_LIST__ = .; LONG (-1); LONG (-1); KEEP (*(.dtors)); KEEP (*(.dtor)); KEEP (*(SORT_BY_NAME(.dtors.*))); LONG (0); LONG (0); } /* The Cygwin32 library uses a section to avoid copying certain data on fork. This used to be named ".data". The linker used to include this between __data_start__ and __data_end__, but that breaks building the cygwin32 dll. Instead, we name the section ".data_cygwin_nocopy" and explicitly include it after __data_end__. */ .data : { *(.data) KEEP(*(.jcr)) } .rdata : { *(.rdata) . = ALIGN(4); } .eh_frame : { KEEP (*(.eh_frame)) } .pdata : { KEEP(*(.pdata)) } .xdata : { KEEP(*(.xdata)) } .bss : { *(.bss) *(COMMON) } .edata : { *(.edata) } /DISCARD/ : { *(.debug$S) *(.debug$T) *(.debug$F) } .idata : { /* This cannot currently be handled with grouped sections. See pep.em:sort_sections. */ } .CRT : { /* ___crt_xl_end__ is defined in the TLS Directory support code */ } /* Windows TLS expects .tls$AAA to be at the start and .tls$ZZZ to be at the end of the .tls section. This is important because _tls_start MUST be at the beginning of the section to enable SECREL32 relocations with TLS data. */ .tls : { *(.tls) } .endjunk : { /* end is deprecated, don't use it */ } .rsrc : SUBALIGN(4) { *(.rsrc) } .reloc : { *(.reloc) } .stab : { *(.stab) } .stabstr : { *(.stabstr) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section. Unlike other targets that fake this by putting the section VMA at 0, the PE format will not allow it. */ /* DWARF 1.1 and DWARF 2. */ .debug_aranges : { *(.debug_aranges) } .zdebug_aranges : { *(.zdebug_aranges) } .debug_pubnames : { *(.debug_pubnames) } .zdebug_pubnames : { *(.zdebug_pubnames) } /* DWARF 2. */ .debug_info : { *(.debug_info) } .zdebug_info : { *(.zdebug_info) } .debug_abbrev : { *(.debug_abbrev) } .zdebug_abbrev : { *(.zdebug_abbrev) } .debug_line : { *(.debug_line) } .zdebug_line : { *(.zdebug_line) } .debug_frame : { *(.debug_frame*) } .zdebug_frame : { *(.zdebug_frame*) } .debug_str : { *(.debug_str) } .zdebug_str : { *(.zdebug_str) } .debug_loc : { *(.debug_loc) } .zdebug_loc : { *(.zdebug_loc) } .debug_macinfo : { *(.debug_macinfo) } .zdebug_macinfo : { *(.zdebug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames : { *(.debug_weaknames) } .zdebug_weaknames : { *(.zdebug_weaknames) } .debug_funcnames : { *(.debug_funcnames) } .zdebug_funcnames : { *(.zdebug_funcnames) } .debug_typenames : { *(.debug_typenames) } .zdebug_typenames : { *(.zdebug_typenames) } .debug_varnames : { *(.debug_varnames) } .zdebug_varnames : { *(.zdebug_varnames) } /* DWARF 3. */ .debug_pubtypes : { *(.debug_pubtypes) } .zdebug_pubtypes : { *(.zdebug_pubtypes) } .debug_ranges : { *(.debug_ranges) } .zdebug_ranges : { *(.zdebug_ranges) } /* DWARF 4. */ .debug_types : { *(.debug_types) } .zdebug_types : { *(.zdebug_types) } /* DWARF 5. */ .debug_addr : { *(.debug_addr) } .zdebug_addr : { *(.zdebug_addr) } .debug_line_str : { *(.debug_line_str) } .zdebug_line_str : { *(.zdebug_line_str) } .debug_loclists : { *(.debug_loclists) } .zdebug_loclists : { *(.zdebug_loclists) } .debug_macro : { *(.debug_macro) } .zdebug_macro : { *(.zdebug_macro) } .debug_names : { *(.debug_names) } .zdebug_names : { *(.zdebug_names) } .debug_rnglists : { *(.debug_rnglists) } .zdebug_rnglists : { *(.zdebug_rnglists) } .debug_str_offsets : { *(.debug_str_offsets) } .zdebug_str_offsets : { *(.zdebug_str_offsets) } .debug_sup : { *(.debug_sup) } /* For Go and Rust. */ .debug_gdb_scripts : { *(.debug_gdb_scripts) } .zdebug_gdb_scripts : { *(.zdebug_gdb_scripts) } } /* Script for -r */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT(pe-x86-64) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-pep/lib"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { .text : { *(.text) } /* The Cygwin32 library uses a section to avoid copying certain data on fork. This used to be named ".data". The linker used to include this between __data_start__ and __data_end__, but that breaks building the cygwin32 dll. Instead, we name the section ".data_cygwin_nocopy" and explicitly include it after __data_end__. */ .data : { *(.data) KEEP(*(.jcr)) } .rdata : { *(.rdata) . = ALIGN(4); } .eh_frame : { KEEP (*(.eh_frame)) } .pdata : { KEEP(*(.pdata)) } .xdata : { KEEP(*(.xdata)) } .bss : { *(.bss) *(COMMON) } .edata : { *(.edata) } /DISCARD/ : { *(.debug$S) *(.debug$T) *(.debug$F) } .idata : { /* This cannot currently be handled with grouped sections. See pep.em:sort_sections. */ } .CRT : { /* ___crt_xl_end__ is defined in the TLS Directory support code */ } /* Windows TLS expects .tls$AAA to be at the start and .tls$ZZZ to be at the end of the .tls section. This is important because _tls_start MUST be at the beginning of the section to enable SECREL32 relocations with TLS data. */ .tls : { *(.tls) } .endjunk : { /* end is deprecated, don't use it */ } .rsrc : SUBALIGN(4) { *(.rsrc) } .reloc : { *(.reloc) } .stab : { *(.stab) } .stabstr : { *(.stabstr) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section. Unlike other targets that fake this by putting the section VMA at 0, the PE format will not allow it. */ /* DWARF 1.1 and DWARF 2. */ .debug_aranges : { *(.debug_aranges) } .zdebug_aranges : { *(.zdebug_aranges) } .debug_pubnames : { *(.debug_pubnames) } .zdebug_pubnames : { *(.zdebug_pubnames) } /* DWARF 2. */ .debug_info : { *(.debug_info) } .zdebug_info : { *(.zdebug_info) } .debug_abbrev : { *(.debug_abbrev) } .zdebug_abbrev : { *(.zdebug_abbrev) } .debug_line : { *(.debug_line) } .zdebug_line : { *(.zdebug_line) } .debug_frame : { *(.debug_frame*) } .zdebug_frame : { *(.zdebug_frame*) } .debug_str : { *(.debug_str) } .zdebug_str : { *(.zdebug_str) } .debug_loc : { *(.debug_loc) } .zdebug_loc : { *(.zdebug_loc) } .debug_macinfo : { *(.debug_macinfo) } .zdebug_macinfo : { *(.zdebug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames : { *(.debug_weaknames) } .zdebug_weaknames : { *(.zdebug_weaknames) } .debug_funcnames : { *(.debug_funcnames) } .zdebug_funcnames : { *(.zdebug_funcnames) } .debug_typenames : { *(.debug_typenames) } .zdebug_typenames : { *(.zdebug_typenames) } .debug_varnames : { *(.debug_varnames) } .zdebug_varnames : { *(.zdebug_varnames) } /* DWARF 3. */ .debug_pubtypes : { *(.debug_pubtypes) } .zdebug_pubtypes : { *(.zdebug_pubtypes) } .debug_ranges : { *(.debug_ranges) } .zdebug_ranges : { *(.zdebug_ranges) } /* DWARF 4. */ .debug_types : { *(.debug_types) } .zdebug_types : { *(.zdebug_types) } /* DWARF 5. */ .debug_addr : { *(.debug_addr) } .zdebug_addr : { *(.zdebug_addr) } .debug_line_str : { *(.debug_line_str) } .zdebug_line_str : { *(.zdebug_line_str) } .debug_loclists : { *(.debug_loclists) } .zdebug_loclists : { *(.zdebug_loclists) } .debug_macro : { *(.debug_macro) } .zdebug_macro : { *(.zdebug_macro) } .debug_names : { *(.debug_names) } .zdebug_names : { *(.zdebug_names) } .debug_rnglists : { *(.debug_rnglists) } .zdebug_rnglists : { *(.zdebug_rnglists) } .debug_str_offsets : { *(.debug_str_offsets) } .zdebug_str_offsets : { *(.zdebug_str_offsets) } .debug_sup : { *(.debug_sup) } /* For Go and Rust. */ .debug_gdb_scripts : { *(.debug_gdb_scripts) } .zdebug_gdb_scripts : { *(.zdebug_gdb_scripts) } } /* Script for -N */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT(pei-x86-64) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-pep/lib"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Make the virtual address and file offset synced if the alignment is lower than the target page size. */ . = SIZEOF_HEADERS; . = ALIGN(__section_alignment__); .text __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) : { KEEP (*(SORT_NONE(.init))) *(.text) *(SORT(.text$*)) *(.text.*) *(.gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) . = ALIGN(8); /* Note: we always define __CTOR_LIST__ and ___CTOR_LIST__ here, we do not PROVIDE them. This is because the ctors.o startup code in libgcc defines them as common symbols, with the expectation that they will be overridden by the definitions here. If we PROVIDE the symbols then they will not be overridden and global constructors will not be run. See PR 22762 for more details. This does mean that it is not possible for a user to define their own __CTOR_LIST__ and __DTOR_LIST__ symbols; if they do, the content from those variables are included but the symbols defined here silently take precedence. If they truly need to be redefined, a custom linker script will have to be used. (The custom script can just be a copy of this script with the PROVIDE() qualifiers added). In particular this means that ld -Ur does not work, because the proper __CTOR_LIST__ set by ld -Ur is overridden by a bogus __CTOR_LIST__ set by the final link. See PR 46. */ ___CTOR_LIST__ = .; __CTOR_LIST__ = .; LONG (-1); LONG (-1); KEEP (*(.ctors)); KEEP (*(.ctor)); KEEP (*(SORT_BY_NAME(.ctors.*))); LONG (0); LONG (0); /* See comment about __CTOR_LIST__ above. The same reasoning applies here too. */ ___DTOR_LIST__ = .; __DTOR_LIST__ = .; LONG (-1); LONG (-1); KEEP (*(.dtors)); KEEP (*(.dtor)); KEEP (*(SORT_BY_NAME(.dtors.*))); LONG (0); LONG (0); KEEP (*(SORT_NONE(.fini))) /* ??? Why is .gcc_exc here? */ *(.gcc_exc) PROVIDE (etext = .); KEEP (*(.gcc_except_table)) } /* The Cygwin32 library uses a section to avoid copying certain data on fork. This used to be named ".data". The linker used to include this between __data_start__ and __data_end__, but that breaks building the cygwin32 dll. Instead, we name the section ".data_cygwin_nocopy" and explicitly include it after __data_end__. */ .data BLOCK(__section_alignment__) : { __data_start__ = . ; *(.data) *(.data2) *(SORT(.data$*)) KEEP(*(.jcr)) __data_end__ = . ; *(.data_cygwin_nocopy) } .rdata BLOCK(__section_alignment__) : { *(.rdata) *(SORT(.rdata$*)) . = ALIGN(4); __rt_psrelocs_start = .; KEEP(*(.rdata_runtime_pseudo_reloc)) __rt_psrelocs_end = .; } __rt_psrelocs_size = __rt_psrelocs_end - __rt_psrelocs_start; ___RUNTIME_PSEUDO_RELOC_LIST_END__ = .; __RUNTIME_PSEUDO_RELOC_LIST_END__ = .; ___RUNTIME_PSEUDO_RELOC_LIST__ = . - __rt_psrelocs_size; __RUNTIME_PSEUDO_RELOC_LIST__ = . - __rt_psrelocs_size; .eh_frame BLOCK(__section_alignment__) : { KEEP (*(.eh_frame*)) } .pdata BLOCK(__section_alignment__) : { KEEP(*(.pdata*)) } .xdata BLOCK(__section_alignment__) : { KEEP(*(.xdata*)) } .bss BLOCK(__section_alignment__) : { __bss_start__ = . ; *(.bss) *(COMMON) __bss_end__ = . ; } .edata BLOCK(__section_alignment__) : { *(.edata) } /DISCARD/ : { *(.debug$S) *(.debug$T) *(.debug$F) *(.drectve) *(.note.GNU-stack) *(.gnu.lto_*) } .idata BLOCK(__section_alignment__) : { /* This cannot currently be handled with grouped sections. See pep.em:sort_sections. */ KEEP (SORT(*)(.idata$2)) KEEP (SORT(*)(.idata$3)) /* These zeroes mark the end of the import list. */ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); . = ALIGN(8); KEEP (SORT(*)(.idata$4)) __IAT_start__ = .; SORT(*)(.idata$5) __IAT_end__ = .; KEEP (SORT(*)(.idata$6)) KEEP (SORT(*)(.idata$7)) } .CRT BLOCK(__section_alignment__) : { ___crt_xc_start__ = . ; KEEP (*(SORT(.CRT$XC*))) /* C initialization */ ___crt_xc_end__ = . ; ___crt_xi_start__ = . ; KEEP (*(SORT(.CRT$XI*))) /* C++ initialization */ ___crt_xi_end__ = . ; ___crt_xl_start__ = . ; KEEP (*(SORT(.CRT$XL*))) /* TLS callbacks */ /* ___crt_xl_end__ is defined in the TLS Directory support code */ ___crt_xp_start__ = . ; KEEP (*(SORT(.CRT$XP*))) /* Pre-termination */ ___crt_xp_end__ = . ; ___crt_xt_start__ = . ; KEEP (*(SORT(.CRT$XT*))) /* Termination */ ___crt_xt_end__ = . ; } /* Windows TLS expects .tls$AAA to be at the start and .tls$ZZZ to be at the end of the .tls section. This is important because _tls_start MUST be at the beginning of the section to enable SECREL32 relocations with TLS data. */ .tls BLOCK(__section_alignment__) : { ___tls_start__ = . ; KEEP (*(.tls$AAA)) KEEP (*(.tls)) KEEP (*(.tls$)) KEEP (*(SORT(.tls$*))) KEEP (*(.tls$ZZZ)) ___tls_end__ = . ; } .endjunk BLOCK(__section_alignment__) : { /* end is deprecated, don't use it */ PROVIDE (end = .); PROVIDE ( _end = .); __end__ = .; } .rsrc BLOCK(__section_alignment__) : SUBALIGN(4) { KEEP (*(.rsrc)) KEEP (*(.rsrc$*)) } .reloc BLOCK(__section_alignment__) : { *(.reloc) } .stab BLOCK(__section_alignment__) (NOLOAD) : { *(.stab) } .stabstr BLOCK(__section_alignment__) (NOLOAD) : { *(.stabstr) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section. Unlike other targets that fake this by putting the section VMA at 0, the PE format will not allow it. */ /* DWARF 1.1 and DWARF 2. */ .debug_aranges BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_aranges) } .zdebug_aranges BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_aranges) } .debug_pubnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_pubnames) } .zdebug_pubnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_pubnames) } /* DWARF 2. */ .debug_info BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_info .gnu.linkonce.wi.*) } .zdebug_info BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_info .zdebug.gnu.linkonce.wi.*) } .debug_abbrev BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_abbrev) } .zdebug_abbrev BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_abbrev) } .debug_line BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_line) } .zdebug_line BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_line) } .debug_frame BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_frame*) } .zdebug_frame BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_frame*) } .debug_str BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_str) } .zdebug_str BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_str) } .debug_loc BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_loc) } .zdebug_loc BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_loc) } .debug_macinfo BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_macinfo) } .zdebug_macinfo BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_weaknames) } .zdebug_weaknames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_weaknames) } .debug_funcnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_funcnames) } .zdebug_funcnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_funcnames) } .debug_typenames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_typenames) } .zdebug_typenames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_typenames) } .debug_varnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_varnames) } .zdebug_varnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_varnames) } /* DWARF 3. */ .debug_pubtypes BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_pubtypes) } .zdebug_pubtypes BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_pubtypes) } .debug_ranges BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_ranges) } .zdebug_ranges BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_ranges) } /* DWARF 4. */ .debug_types BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_types .gnu.linkonce.wt.*) } .zdebug_types BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_types .gnu.linkonce.wt.*) } /* DWARF 5. */ .debug_addr BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_addr) } .zdebug_addr BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_addr) } .debug_line_str BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_line_str) } .zdebug_line_str BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_line_str) } .debug_loclists BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_loclists) } .zdebug_loclists BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_loclists) } .debug_macro BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_macro) } .zdebug_macro BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_macro) } .debug_names BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_names) } .zdebug_names BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_names) } .debug_rnglists BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_rnglists) } .zdebug_rnglists BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_rnglists) } .debug_str_offsets BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_str_offsets) } .zdebug_str_offsets BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_str_offsets) } .debug_sup BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_sup) } /* For Go and Rust. */ .debug_gdb_scripts BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_gdb_scripts) } .zdebug_gdb_scripts BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_gdb_scripts) } } /* Script for -n */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT(pei-x86-64) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-pep/lib"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Make the virtual address and file offset synced if the alignment is lower than the target page size. */ . = SIZEOF_HEADERS; . = ALIGN(__section_alignment__); .text __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) : { KEEP (*(SORT_NONE(.init))) *(.text) *(SORT(.text$*)) *(.text.*) *(.gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) . = ALIGN(8); /* Note: we always define __CTOR_LIST__ and ___CTOR_LIST__ here, we do not PROVIDE them. This is because the ctors.o startup code in libgcc defines them as common symbols, with the expectation that they will be overridden by the definitions here. If we PROVIDE the symbols then they will not be overridden and global constructors will not be run. See PR 22762 for more details. This does mean that it is not possible for a user to define their own __CTOR_LIST__ and __DTOR_LIST__ symbols; if they do, the content from those variables are included but the symbols defined here silently take precedence. If they truly need to be redefined, a custom linker script will have to be used. (The custom script can just be a copy of this script with the PROVIDE() qualifiers added). In particular this means that ld -Ur does not work, because the proper __CTOR_LIST__ set by ld -Ur is overridden by a bogus __CTOR_LIST__ set by the final link. See PR 46. */ ___CTOR_LIST__ = .; __CTOR_LIST__ = .; LONG (-1); LONG (-1); KEEP (*(.ctors)); KEEP (*(.ctor)); KEEP (*(SORT_BY_NAME(.ctors.*))); LONG (0); LONG (0); /* See comment about __CTOR_LIST__ above. The same reasoning applies here too. */ ___DTOR_LIST__ = .; __DTOR_LIST__ = .; LONG (-1); LONG (-1); KEEP (*(.dtors)); KEEP (*(.dtor)); KEEP (*(SORT_BY_NAME(.dtors.*))); LONG (0); LONG (0); KEEP (*(SORT_NONE(.fini))) /* ??? Why is .gcc_exc here? */ *(.gcc_exc) PROVIDE (etext = .); KEEP (*(.gcc_except_table)) } /* The Cygwin32 library uses a section to avoid copying certain data on fork. This used to be named ".data". The linker used to include this between __data_start__ and __data_end__, but that breaks building the cygwin32 dll. Instead, we name the section ".data_cygwin_nocopy" and explicitly include it after __data_end__. */ .data BLOCK(__section_alignment__) : { __data_start__ = . ; *(.data) *(.data2) *(SORT(.data$*)) KEEP(*(.jcr)) __data_end__ = . ; *(.data_cygwin_nocopy) } .rdata BLOCK(__section_alignment__) : { *(.rdata) *(SORT(.rdata$*)) . = ALIGN(4); __rt_psrelocs_start = .; KEEP(*(.rdata_runtime_pseudo_reloc)) __rt_psrelocs_end = .; } __rt_psrelocs_size = __rt_psrelocs_end - __rt_psrelocs_start; ___RUNTIME_PSEUDO_RELOC_LIST_END__ = .; __RUNTIME_PSEUDO_RELOC_LIST_END__ = .; ___RUNTIME_PSEUDO_RELOC_LIST__ = . - __rt_psrelocs_size; __RUNTIME_PSEUDO_RELOC_LIST__ = . - __rt_psrelocs_size; .eh_frame BLOCK(__section_alignment__) : { KEEP (*(.eh_frame*)) } .pdata BLOCK(__section_alignment__) : { KEEP(*(.pdata*)) } .xdata BLOCK(__section_alignment__) : { KEEP(*(.xdata*)) } .bss BLOCK(__section_alignment__) : { __bss_start__ = . ; *(.bss) *(COMMON) __bss_end__ = . ; } .edata BLOCK(__section_alignment__) : { *(.edata) } /DISCARD/ : { *(.debug$S) *(.debug$T) *(.debug$F) *(.drectve) *(.note.GNU-stack) *(.gnu.lto_*) } .idata BLOCK(__section_alignment__) : { /* This cannot currently be handled with grouped sections. See pep.em:sort_sections. */ KEEP (SORT(*)(.idata$2)) KEEP (SORT(*)(.idata$3)) /* These zeroes mark the end of the import list. */ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); . = ALIGN(8); KEEP (SORT(*)(.idata$4)) __IAT_start__ = .; SORT(*)(.idata$5) __IAT_end__ = .; KEEP (SORT(*)(.idata$6)) KEEP (SORT(*)(.idata$7)) } .CRT BLOCK(__section_alignment__) : { ___crt_xc_start__ = . ; KEEP (*(SORT(.CRT$XC*))) /* C initialization */ ___crt_xc_end__ = . ; ___crt_xi_start__ = . ; KEEP (*(SORT(.CRT$XI*))) /* C++ initialization */ ___crt_xi_end__ = . ; ___crt_xl_start__ = . ; KEEP (*(SORT(.CRT$XL*))) /* TLS callbacks */ /* ___crt_xl_end__ is defined in the TLS Directory support code */ ___crt_xp_start__ = . ; KEEP (*(SORT(.CRT$XP*))) /* Pre-termination */ ___crt_xp_end__ = . ; ___crt_xt_start__ = . ; KEEP (*(SORT(.CRT$XT*))) /* Termination */ ___crt_xt_end__ = . ; } /* Windows TLS expects .tls$AAA to be at the start and .tls$ZZZ to be at the end of the .tls section. This is important because _tls_start MUST be at the beginning of the section to enable SECREL32 relocations with TLS data. */ .tls BLOCK(__section_alignment__) : { ___tls_start__ = . ; KEEP (*(.tls$AAA)) KEEP (*(.tls)) KEEP (*(.tls$)) KEEP (*(SORT(.tls$*))) KEEP (*(.tls$ZZZ)) ___tls_end__ = . ; } .endjunk BLOCK(__section_alignment__) : { /* end is deprecated, don't use it */ PROVIDE (end = .); PROVIDE ( _end = .); __end__ = .; } .rsrc BLOCK(__section_alignment__) : SUBALIGN(4) { KEEP (*(.rsrc)) KEEP (*(.rsrc$*)) } .reloc BLOCK(__section_alignment__) : { *(.reloc) } .stab BLOCK(__section_alignment__) (NOLOAD) : { *(.stab) } .stabstr BLOCK(__section_alignment__) (NOLOAD) : { *(.stabstr) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section. Unlike other targets that fake this by putting the section VMA at 0, the PE format will not allow it. */ /* DWARF 1.1 and DWARF 2. */ .debug_aranges BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_aranges) } .zdebug_aranges BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_aranges) } .debug_pubnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_pubnames) } .zdebug_pubnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_pubnames) } /* DWARF 2. */ .debug_info BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_info .gnu.linkonce.wi.*) } .zdebug_info BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_info .zdebug.gnu.linkonce.wi.*) } .debug_abbrev BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_abbrev) } .zdebug_abbrev BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_abbrev) } .debug_line BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_line) } .zdebug_line BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_line) } .debug_frame BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_frame*) } .zdebug_frame BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_frame*) } .debug_str BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_str) } .zdebug_str BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_str) } .debug_loc BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_loc) } .zdebug_loc BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_loc) } .debug_macinfo BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_macinfo) } .zdebug_macinfo BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_weaknames) } .zdebug_weaknames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_weaknames) } .debug_funcnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_funcnames) } .zdebug_funcnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_funcnames) } .debug_typenames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_typenames) } .zdebug_typenames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_typenames) } .debug_varnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_varnames) } .zdebug_varnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_varnames) } /* DWARF 3. */ .debug_pubtypes BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_pubtypes) } .zdebug_pubtypes BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_pubtypes) } .debug_ranges BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_ranges) } .zdebug_ranges BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_ranges) } /* DWARF 4. */ .debug_types BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_types .gnu.linkonce.wt.*) } .zdebug_types BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_types .gnu.linkonce.wt.*) } /* DWARF 5. */ .debug_addr BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_addr) } .zdebug_addr BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_addr) } .debug_line_str BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_line_str) } .zdebug_line_str BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_line_str) } .debug_loclists BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_loclists) } .zdebug_loclists BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_loclists) } .debug_macro BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_macro) } .zdebug_macro BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_macro) } .debug_names BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_names) } .zdebug_names BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_names) } .debug_rnglists BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_rnglists) } .zdebug_rnglists BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_rnglists) } .debug_str_offsets BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_str_offsets) } .zdebug_str_offsets BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_str_offsets) } .debug_sup BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_sup) } /* For Go and Rust. */ .debug_gdb_scripts BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_gdb_scripts) } .zdebug_gdb_scripts BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_gdb_scripts) } } /* Default linker script, for normal executables */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT(pei-x86-64) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-pep/lib"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Make the virtual address and file offset synced if the alignment is lower than the target page size. */ . = SIZEOF_HEADERS; . = ALIGN(__section_alignment__); .text __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) : { KEEP (*(SORT_NONE(.init))) *(.text) *(SORT(.text$*)) *(.text.*) *(.gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) . = ALIGN(8); /* Note: we always define __CTOR_LIST__ and ___CTOR_LIST__ here, we do not PROVIDE them. This is because the ctors.o startup code in libgcc defines them as common symbols, with the expectation that they will be overridden by the definitions here. If we PROVIDE the symbols then they will not be overridden and global constructors will not be run. See PR 22762 for more details. This does mean that it is not possible for a user to define their own __CTOR_LIST__ and __DTOR_LIST__ symbols; if they do, the content from those variables are included but the symbols defined here silently take precedence. If they truly need to be redefined, a custom linker script will have to be used. (The custom script can just be a copy of this script with the PROVIDE() qualifiers added). In particular this means that ld -Ur does not work, because the proper __CTOR_LIST__ set by ld -Ur is overridden by a bogus __CTOR_LIST__ set by the final link. See PR 46. */ ___CTOR_LIST__ = .; __CTOR_LIST__ = .; LONG (-1); LONG (-1); KEEP (*(.ctors)); KEEP (*(.ctor)); KEEP (*(SORT_BY_NAME(.ctors.*))); LONG (0); LONG (0); /* See comment about __CTOR_LIST__ above. The same reasoning applies here too. */ ___DTOR_LIST__ = .; __DTOR_LIST__ = .; LONG (-1); LONG (-1); KEEP (*(.dtors)); KEEP (*(.dtor)); KEEP (*(SORT_BY_NAME(.dtors.*))); LONG (0); LONG (0); KEEP (*(SORT_NONE(.fini))) /* ??? Why is .gcc_exc here? */ *(.gcc_exc) PROVIDE (etext = .); KEEP (*(.gcc_except_table)) } /* The Cygwin32 library uses a section to avoid copying certain data on fork. This used to be named ".data". The linker used to include this between __data_start__ and __data_end__, but that breaks building the cygwin32 dll. Instead, we name the section ".data_cygwin_nocopy" and explicitly include it after __data_end__. */ .data BLOCK(__section_alignment__) : { __data_start__ = . ; *(.data) *(.data2) *(SORT(.data$*)) KEEP(*(.jcr)) __data_end__ = . ; *(.data_cygwin_nocopy) } .rdata BLOCK(__section_alignment__) : { *(.rdata) *(SORT(.rdata$*)) . = ALIGN(4); __rt_psrelocs_start = .; KEEP(*(.rdata_runtime_pseudo_reloc)) __rt_psrelocs_end = .; } __rt_psrelocs_size = __rt_psrelocs_end - __rt_psrelocs_start; ___RUNTIME_PSEUDO_RELOC_LIST_END__ = .; __RUNTIME_PSEUDO_RELOC_LIST_END__ = .; ___RUNTIME_PSEUDO_RELOC_LIST__ = . - __rt_psrelocs_size; __RUNTIME_PSEUDO_RELOC_LIST__ = . - __rt_psrelocs_size; .eh_frame BLOCK(__section_alignment__) : { KEEP (*(.eh_frame*)) } .pdata BLOCK(__section_alignment__) : { KEEP(*(.pdata*)) } .xdata BLOCK(__section_alignment__) : { KEEP(*(.xdata*)) } .bss BLOCK(__section_alignment__) : { __bss_start__ = . ; *(.bss) *(COMMON) __bss_end__ = . ; } .edata BLOCK(__section_alignment__) : { *(.edata) } /DISCARD/ : { *(.debug$S) *(.debug$T) *(.debug$F) *(.drectve) *(.note.GNU-stack) *(.gnu.lto_*) } .idata BLOCK(__section_alignment__) : { /* This cannot currently be handled with grouped sections. See pep.em:sort_sections. */ KEEP (SORT(*)(.idata$2)) KEEP (SORT(*)(.idata$3)) /* These zeroes mark the end of the import list. */ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); . = ALIGN(8); KEEP (SORT(*)(.idata$4)) __IAT_start__ = .; SORT(*)(.idata$5) __IAT_end__ = .; KEEP (SORT(*)(.idata$6)) KEEP (SORT(*)(.idata$7)) } .CRT BLOCK(__section_alignment__) : { ___crt_xc_start__ = . ; KEEP (*(SORT(.CRT$XC*))) /* C initialization */ ___crt_xc_end__ = . ; ___crt_xi_start__ = . ; KEEP (*(SORT(.CRT$XI*))) /* C++ initialization */ ___crt_xi_end__ = . ; ___crt_xl_start__ = . ; KEEP (*(SORT(.CRT$XL*))) /* TLS callbacks */ /* ___crt_xl_end__ is defined in the TLS Directory support code */ ___crt_xp_start__ = . ; KEEP (*(SORT(.CRT$XP*))) /* Pre-termination */ ___crt_xp_end__ = . ; ___crt_xt_start__ = . ; KEEP (*(SORT(.CRT$XT*))) /* Termination */ ___crt_xt_end__ = . ; } /* Windows TLS expects .tls$AAA to be at the start and .tls$ZZZ to be at the end of the .tls section. This is important because _tls_start MUST be at the beginning of the section to enable SECREL32 relocations with TLS data. */ .tls BLOCK(__section_alignment__) : { ___tls_start__ = . ; KEEP (*(.tls$AAA)) KEEP (*(.tls)) KEEP (*(.tls$)) KEEP (*(SORT(.tls$*))) KEEP (*(.tls$ZZZ)) ___tls_end__ = . ; } .endjunk BLOCK(__section_alignment__) : { /* end is deprecated, don't use it */ PROVIDE (end = .); PROVIDE ( _end = .); __end__ = .; } .rsrc BLOCK(__section_alignment__) : SUBALIGN(4) { KEEP (*(.rsrc)) KEEP (*(.rsrc$*)) } .reloc BLOCK(__section_alignment__) : { *(.reloc) } .stab BLOCK(__section_alignment__) (NOLOAD) : { *(.stab) } .stabstr BLOCK(__section_alignment__) (NOLOAD) : { *(.stabstr) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section. Unlike other targets that fake this by putting the section VMA at 0, the PE format will not allow it. */ /* DWARF 1.1 and DWARF 2. */ .debug_aranges BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_aranges) } .zdebug_aranges BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_aranges) } .debug_pubnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_pubnames) } .zdebug_pubnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_pubnames) } /* DWARF 2. */ .debug_info BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_info .gnu.linkonce.wi.*) } .zdebug_info BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_info .zdebug.gnu.linkonce.wi.*) } .debug_abbrev BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_abbrev) } .zdebug_abbrev BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_abbrev) } .debug_line BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_line) } .zdebug_line BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_line) } .debug_frame BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_frame*) } .zdebug_frame BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_frame*) } .debug_str BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_str) } .zdebug_str BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_str) } .debug_loc BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_loc) } .zdebug_loc BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_loc) } .debug_macinfo BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_macinfo) } .zdebug_macinfo BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_weaknames) } .zdebug_weaknames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_weaknames) } .debug_funcnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_funcnames) } .zdebug_funcnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_funcnames) } .debug_typenames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_typenames) } .zdebug_typenames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_typenames) } .debug_varnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_varnames) } .zdebug_varnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_varnames) } /* DWARF 3. */ .debug_pubtypes BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_pubtypes) } .zdebug_pubtypes BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_pubtypes) } .debug_ranges BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_ranges) } .zdebug_ranges BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_ranges) } /* DWARF 4. */ .debug_types BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_types .gnu.linkonce.wt.*) } .zdebug_types BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_types .gnu.linkonce.wt.*) } /* DWARF 5. */ .debug_addr BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_addr) } .zdebug_addr BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_addr) } .debug_line_str BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_line_str) } .zdebug_line_str BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_line_str) } .debug_loclists BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_loclists) } .zdebug_loclists BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_loclists) } .debug_macro BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_macro) } .zdebug_macro BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_macro) } .debug_names BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_names) } .zdebug_names BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_names) } .debug_rnglists BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_rnglists) } .zdebug_rnglists BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_rnglists) } .debug_str_offsets BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_str_offsets) } .zdebug_str_offsets BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_str_offsets) } .debug_sup BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_sup) } /* For Go and Rust. */ .debug_gdb_scripts BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_gdb_scripts) } .zdebug_gdb_scripts BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_gdb_scripts) } } /* Script for --enable-auto-import */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT(pei-x86-64) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/x86_64-pep/lib"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Make the virtual address and file offset synced if the alignment is lower than the target page size. */ . = SIZEOF_HEADERS; . = ALIGN(__section_alignment__); .text __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) : { KEEP (*(SORT_NONE(.init))) *(.text) *(SORT(.text$*)) *(.text.*) *(.gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) . = ALIGN(8); /* Note: we always define __CTOR_LIST__ and ___CTOR_LIST__ here, we do not PROVIDE them. This is because the ctors.o startup code in libgcc defines them as common symbols, with the expectation that they will be overridden by the definitions here. If we PROVIDE the symbols then they will not be overridden and global constructors will not be run. See PR 22762 for more details. This does mean that it is not possible for a user to define their own __CTOR_LIST__ and __DTOR_LIST__ symbols; if they do, the content from those variables are included but the symbols defined here silently take precedence. If they truly need to be redefined, a custom linker script will have to be used. (The custom script can just be a copy of this script with the PROVIDE() qualifiers added). In particular this means that ld -Ur does not work, because the proper __CTOR_LIST__ set by ld -Ur is overridden by a bogus __CTOR_LIST__ set by the final link. See PR 46. */ ___CTOR_LIST__ = .; __CTOR_LIST__ = .; LONG (-1); LONG (-1); KEEP (*(.ctors)); KEEP (*(.ctor)); KEEP (*(SORT_BY_NAME(.ctors.*))); LONG (0); LONG (0); /* See comment about __CTOR_LIST__ above. The same reasoning applies here too. */ ___DTOR_LIST__ = .; __DTOR_LIST__ = .; LONG (-1); LONG (-1); KEEP (*(.dtors)); KEEP (*(.dtor)); KEEP (*(SORT_BY_NAME(.dtors.*))); LONG (0); LONG (0); KEEP (*(SORT_NONE(.fini))) /* ??? Why is .gcc_exc here? */ *(.gcc_exc) PROVIDE (etext = .); KEEP (*(.gcc_except_table)) } /* The Cygwin32 library uses a section to avoid copying certain data on fork. This used to be named ".data". The linker used to include this between __data_start__ and __data_end__, but that breaks building the cygwin32 dll. Instead, we name the section ".data_cygwin_nocopy" and explicitly include it after __data_end__. */ .data BLOCK(__section_alignment__) : { __data_start__ = . ; *(.data) *(.data2) *(SORT(.data$*)) *(.rdata) *(SORT(.rdata$*)) KEEP(*(.jcr)) __data_end__ = . ; *(.data_cygwin_nocopy) } .rdata BLOCK(__section_alignment__) : { . = ALIGN(4); __rt_psrelocs_start = .; KEEP(*(.rdata_runtime_pseudo_reloc)) __rt_psrelocs_end = .; } __rt_psrelocs_size = __rt_psrelocs_end - __rt_psrelocs_start; ___RUNTIME_PSEUDO_RELOC_LIST_END__ = .; __RUNTIME_PSEUDO_RELOC_LIST_END__ = .; ___RUNTIME_PSEUDO_RELOC_LIST__ = . - __rt_psrelocs_size; __RUNTIME_PSEUDO_RELOC_LIST__ = . - __rt_psrelocs_size; .eh_frame BLOCK(__section_alignment__) : { KEEP (*(.eh_frame*)) } .pdata BLOCK(__section_alignment__) : { KEEP(*(.pdata*)) } .xdata BLOCK(__section_alignment__) : { KEEP(*(.xdata*)) } .bss BLOCK(__section_alignment__) : { __bss_start__ = . ; *(.bss) *(COMMON) __bss_end__ = . ; } .edata BLOCK(__section_alignment__) : { *(.edata) } /DISCARD/ : { *(.debug$S) *(.debug$T) *(.debug$F) *(.drectve) *(.note.GNU-stack) *(.gnu.lto_*) } .idata BLOCK(__section_alignment__) : { /* This cannot currently be handled with grouped sections. See pep.em:sort_sections. */ KEEP (SORT(*)(.idata$2)) KEEP (SORT(*)(.idata$3)) /* These zeroes mark the end of the import list. */ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); . = ALIGN(8); KEEP (SORT(*)(.idata$4)) __IAT_start__ = .; SORT(*)(.idata$5) __IAT_end__ = .; KEEP (SORT(*)(.idata$6)) KEEP (SORT(*)(.idata$7)) } .CRT BLOCK(__section_alignment__) : { ___crt_xc_start__ = . ; KEEP (*(SORT(.CRT$XC*))) /* C initialization */ ___crt_xc_end__ = . ; ___crt_xi_start__ = . ; KEEP (*(SORT(.CRT$XI*))) /* C++ initialization */ ___crt_xi_end__ = . ; ___crt_xl_start__ = . ; KEEP (*(SORT(.CRT$XL*))) /* TLS callbacks */ /* ___crt_xl_end__ is defined in the TLS Directory support code */ ___crt_xp_start__ = . ; KEEP (*(SORT(.CRT$XP*))) /* Pre-termination */ ___crt_xp_end__ = . ; ___crt_xt_start__ = . ; KEEP (*(SORT(.CRT$XT*))) /* Termination */ ___crt_xt_end__ = . ; } /* Windows TLS expects .tls$AAA to be at the start and .tls$ZZZ to be at the end of the .tls section. This is important because _tls_start MUST be at the beginning of the section to enable SECREL32 relocations with TLS data. */ .tls BLOCK(__section_alignment__) : { ___tls_start__ = . ; KEEP (*(.tls$AAA)) KEEP (*(.tls)) KEEP (*(.tls$)) KEEP (*(SORT(.tls$*))) KEEP (*(.tls$ZZZ)) ___tls_end__ = . ; } .endjunk BLOCK(__section_alignment__) : { /* end is deprecated, don't use it */ PROVIDE (end = .); PROVIDE ( _end = .); __end__ = .; } .rsrc BLOCK(__section_alignment__) : SUBALIGN(4) { KEEP (*(.rsrc)) KEEP (*(.rsrc$*)) } .reloc BLOCK(__section_alignment__) : { *(.reloc) } .stab BLOCK(__section_alignment__) (NOLOAD) : { *(.stab) } .stabstr BLOCK(__section_alignment__) (NOLOAD) : { *(.stabstr) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section. Unlike other targets that fake this by putting the section VMA at 0, the PE format will not allow it. */ /* DWARF 1.1 and DWARF 2. */ .debug_aranges BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_aranges) } .zdebug_aranges BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_aranges) } .debug_pubnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_pubnames) } .zdebug_pubnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_pubnames) } /* DWARF 2. */ .debug_info BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_info .gnu.linkonce.wi.*) } .zdebug_info BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_info .zdebug.gnu.linkonce.wi.*) } .debug_abbrev BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_abbrev) } .zdebug_abbrev BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_abbrev) } .debug_line BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_line) } .zdebug_line BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_line) } .debug_frame BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_frame*) } .zdebug_frame BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_frame*) } .debug_str BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_str) } .zdebug_str BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_str) } .debug_loc BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_loc) } .zdebug_loc BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_loc) } .debug_macinfo BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_macinfo) } .zdebug_macinfo BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_macinfo) } /* SGI/MIPS DWARF 2 extensions. */ .debug_weaknames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_weaknames) } .zdebug_weaknames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_weaknames) } .debug_funcnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_funcnames) } .zdebug_funcnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_funcnames) } .debug_typenames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_typenames) } .zdebug_typenames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_typenames) } .debug_varnames BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_varnames) } .zdebug_varnames BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_varnames) } /* DWARF 3. */ .debug_pubtypes BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_pubtypes) } .zdebug_pubtypes BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_pubtypes) } .debug_ranges BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_ranges) } .zdebug_ranges BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_ranges) } /* DWARF 4. */ .debug_types BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_types .gnu.linkonce.wt.*) } .zdebug_types BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_types .gnu.linkonce.wt.*) } /* DWARF 5. */ .debug_addr BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_addr) } .zdebug_addr BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_addr) } .debug_line_str BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_line_str) } .zdebug_line_str BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_line_str) } .debug_loclists BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_loclists) } .zdebug_loclists BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_loclists) } .debug_macro BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_macro) } .zdebug_macro BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_macro) } .debug_names BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_names) } .zdebug_names BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_names) } .debug_rnglists BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_rnglists) } .zdebug_rnglists BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_rnglists) } .debug_str_offsets BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_str_offsets) } .zdebug_str_offsets BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_str_offsets) } .debug_sup BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_sup) } /* For Go and Rust. */ .debug_gdb_scripts BLOCK(__section_alignment__) (NOLOAD) : { *(.debug_gdb_scripts) } .zdebug_gdb_scripts BLOCK(__section_alignment__) (NOLOAD) : { *(.zdebug_gdb_scripts) } } %P: warning: .buildid section discarded, --build-id ignored %P: warning: unrecognized --build-id style ignored %P: warning: cannot create .buildid section, --build-id ignored %F%P: cannot perform PE operations on non PE output file '%pB' warning: resolving %s by linking to %s Use --enable-stdcall-fixup to disable these warnings Use --disable-stdcall-fixup to disable these fixups %P: warning: overwriting decorated name %s with %s %X%P: unable to process relocs: %E use-nul-prefixed-import-tablesenable-runtime-pseudo-reloc-v2 --thumb-entry= Set the entry point to be Thumb --[no-]insert-timestamp Use a real timestamp rather than zero (default). export, place into import library instead. --compat-implib Create backward compatible import libs; create __imp_ as well. --enable-auto-image-base[=
] Automatically choose image base for DLLs (optionally starting with address) unless specifically set with --image-base --disable-auto-image-base Do not auto-choose image base. (default) --enable-runtime-pseudo-reloc Work around auto-import limitations by adding pseudo-relocations resolved at runtime. --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for auto-imported DATA. --enable-extra-pe-debug Enable verbose debug output when building or linking to DLLs (esp. auto-import) --large-address-aware Executable supports virtual addresses greater than 2 gigabytes --disable-large-address-aware Executable does not support virtual addresses greater than 2 gigabytes --[disable-]no-seh Image does not use SEH. No SE handler may be called in this image %P: warning: resolving %s by linking to %s %P: warning: --export-dynamic is not supported for PE targets, did you mean --export-all-symbols? enable-runtime-pseudo-reloc-v1/* Script for -Ur */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-bpfle", "elf64-bpfbe", "elf64-bpfle") OUTPUT_ARCH(bpf) /* For some reason, the Solaris linker makes bad executables if gld -r is used and the intermediate file has sections starting at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld bug. But for now assigning the zero vmas works. */ SECTIONS { .interp 0 : { *(.interp) } .note.gnu.build-id 0: { *(.note.gnu.build-id) } .hash 0 : { *(.hash) } .gnu.hash 0 : { *(.gnu.hash) } .dynsym 0 : { *(.dynsym) } .dynstr 0 : { *(.dynstr) } .gnu.version 0 : { *(.gnu.version) } .gnu.version_d 0: { *(.gnu.version_d) } .gnu.version_r 0: { *(.gnu.version_r) } .rel.init 0 : { *(.rel.init) } .rela.init 0 : { *(.rela.init) } .rel.text 0 : { *(.rel.text) } .rela.text 0 : { *(.rela.text) } .rel.fini 0 : { *(.rel.fini) } .rela.fini 0 : { *(.rela.fini) } .rel.rodata 0 : { *(.rel.rodata) } .rela.rodata 0 : { *(.rela.rodata) } .rel.data.rel.ro 0 : { *(.rel.data.rel.ro) } .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) } .rel.data 0 : { *(.rel.data) } .rela.data 0 : { *(.rela.data) } .rel.tdata 0 : { *(.rel.tdata) } .rela.tdata 0 : { *(.rela.tdata) } .rel.tbss 0 : { *(.rel.tbss) } .rela.tbss 0 : { *(.rela.tbss) } .rel.ctors 0 : { *(.rel.ctors) } .rela.ctors 0 : { *(.rela.ctors) } .rel.dtors 0 : { *(.rel.dtors) } .rela.dtors 0 : { *(.rela.dtors) } .rel.got 0 : { *(.rel.got) } .rela.got 0 : { *(.rela.got) } .rel.sdata 0 : { *(.rel.sdata) } .rela.sdata 0 : { *(.rela.sdata) } .rel.sbss 0 : { *(.rel.sbss) } .rela.sbss 0 : { *(.rela.sbss) } .rel.sdata2 0 : { *(.rel.sdata2) } .rela.sdata2 0 : { *(.rela.sdata2) } .rel.sbss2 0 : { *(.rel.sbss2) } .rela.sbss2 0 : { *(.rela.sbss2) } .rel.bss 0 : { *(.rel.bss) } .rela.bss 0 : { *(.rela.bss) } .rel.iplt 0 : { *(.rel.iplt) } .rela.iplt 0 : { *(.rela.iplt) } .rel.plt 0 : { *(.rel.plt) } .rela.plt 0 : { *(.rela.plt) } .init 0 : { KEEP (*(SORT_NONE(.init))) } .plt 0 : { *(.plt) } .iplt 0 : { *(.iplt) } .text 0 : { *(.text .stub) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini 0 : { KEEP (*(SORT_NONE(.fini))) } .rodata 0 : { *(.rodata) } .rodata1 0 : { *(.rodata1) } .sdata2 0 : { *(.sdata2) } .sbss2 0 : { *(.sbss2) } .eh_frame_hdr 0 : { *(.eh_frame_hdr) } .eh_frame 0 : ONLY_IF_RO { KEEP (*(.eh_frame)) } .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) } .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) } /* Exception handling */ .eh_frame 0 : ONLY_IF_RW { KEEP (*(.eh_frame)) } .gnu_extab 0 : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) } .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) } /* Thread Local Storage sections */ .tdata 0 : { *(.tdata) } .tbss 0 : { *(.tbss) } .jcr 0 : { KEEP (*(.jcr)) } .dynamic 0 : { *(.dynamic) } .data 0 : { *(.data) SORT(CONSTRUCTORS) } .data1 0 : { *(.data1) } .got 0 : { *(.got) } /* We want the small data sections together, so single-instruction offsets can access them all, and initialized data all before uninitialized, so we can shorten the on-disk segment size. */ .sdata 0 : { *(.sdata) } .sbss 0 : { *(.sbss) } .bss 0 : { *(.bss) } /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } } /* Script for -r */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-bpfle", "elf64-bpfbe", "elf64-bpfle") OUTPUT_ARCH(bpf) /* For some reason, the Solaris linker makes bad executables if gld -r is used and the intermediate file has sections starting at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld bug. But for now assigning the zero vmas works. */ SECTIONS { .interp 0 : { *(.interp) } .note.gnu.build-id 0: { *(.note.gnu.build-id) } .hash 0 : { *(.hash) } .gnu.hash 0 : { *(.gnu.hash) } .dynsym 0 : { *(.dynsym) } .dynstr 0 : { *(.dynstr) } .gnu.version 0 : { *(.gnu.version) } .gnu.version_d 0: { *(.gnu.version_d) } .gnu.version_r 0: { *(.gnu.version_r) } .rel.init 0 : { *(.rel.init) } .rela.init 0 : { *(.rela.init) } .rel.text 0 : { *(.rel.text) } .rela.text 0 : { *(.rela.text) } .rel.fini 0 : { *(.rel.fini) } .rela.fini 0 : { *(.rela.fini) } .rel.rodata 0 : { *(.rel.rodata) } .rela.rodata 0 : { *(.rela.rodata) } .rel.data.rel.ro 0 : { *(.rel.data.rel.ro) } .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) } .rel.data 0 : { *(.rel.data) } .rela.data 0 : { *(.rela.data) } .rel.tdata 0 : { *(.rel.tdata) } .rela.tdata 0 : { *(.rela.tdata) } .rel.tbss 0 : { *(.rel.tbss) } .rela.tbss 0 : { *(.rela.tbss) } .rel.ctors 0 : { *(.rel.ctors) } .rela.ctors 0 : { *(.rela.ctors) } .rel.dtors 0 : { *(.rel.dtors) } .rela.dtors 0 : { *(.rela.dtors) } .rel.got 0 : { *(.rel.got) } .rela.got 0 : { *(.rela.got) } .rel.sdata 0 : { *(.rel.sdata) } .rela.sdata 0 : { *(.rela.sdata) } .rel.sbss 0 : { *(.rel.sbss) } .rela.sbss 0 : { *(.rela.sbss) } .rel.sdata2 0 : { *(.rel.sdata2) } .rela.sdata2 0 : { *(.rela.sdata2) } .rel.sbss2 0 : { *(.rel.sbss2) } .rela.sbss2 0 : { *(.rela.sbss2) } .rel.bss 0 : { *(.rel.bss) } .rela.bss 0 : { *(.rela.bss) } .rel.iplt 0 : { *(.rel.iplt) } .rela.iplt 0 : { *(.rela.iplt) } .rel.plt 0 : { *(.rel.plt) } .rela.plt 0 : { *(.rela.plt) } .init 0 : { KEEP (*(SORT_NONE(.init))) } .plt 0 : { *(.plt) } .iplt 0 : { *(.iplt) } .text 0 : { *(.text .stub) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini 0 : { KEEP (*(SORT_NONE(.fini))) } .rodata 0 : { *(.rodata) } .rodata1 0 : { *(.rodata1) } .sdata2 0 : { *(.sdata2) } .sbss2 0 : { *(.sbss2) } .eh_frame_hdr 0 : { *(.eh_frame_hdr) } .eh_frame 0 : ONLY_IF_RO { KEEP (*(.eh_frame)) } .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) } .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) } /* Exception handling */ .eh_frame 0 : ONLY_IF_RW { KEEP (*(.eh_frame)) } .gnu_extab 0 : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) } .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) } /* Thread Local Storage sections */ .tdata 0 : { *(.tdata) } .tbss 0 : { *(.tbss) } .jcr 0 : { KEEP (*(.jcr)) } .dynamic 0 : { *(.dynamic) } .data 0 : { *(.data) } .data1 0 : { *(.data1) } .got 0 : { *(.got) } /* We want the small data sections together, so single-instruction offsets can access them all, and initialized data all before uninitialized, so we can shorten the on-disk segment size. */ .sdata 0 : { *(.sdata) } .sbss 0 : { *(.sbss) } .bss 0 : { *(.bss) } /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } } /* Script for -N */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-bpfle", "elf64-bpfbe", "elf64-bpfle") OUTPUT_ARCH(bpf) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/bpf-unknown-none/lib"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000); .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rela.init : { *(.rela.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rela.fini : { *(.rela.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rela.ctors : { *(.rela.ctors) } .rel.dtors : { *(.rel.dtors) } .rela.dtors : { *(.rela.dtors) } .rel.got : { *(.rel.got) } .rela.got : { *(.rela.got) } .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) } .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) } .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) } .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) } .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) } .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rel.iplt : { PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .rela.iplt : { PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .rel.plt : { *(.rel.plt) } .rela.plt : { *(.rela.plt) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) } .iplt : { *(.iplt) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .sdata2 : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) } .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = .; /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } /* We want the small data sections together, so single-instruction offsets can access them all, and initialized data all before uninitialized, so we can shorten the on-disk segment size. */ .sdata : { *(.sdata .sdata.* .gnu.linkonce.s.*) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .sbss : { *(.dynsbss) *(.sbss .sbss.* .gnu.linkonce.sb.*) *(.scommon) } .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -n */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-bpfle", "elf64-bpfbe", "elf64-bpfle") OUTPUT_ARCH(bpf) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/bpf-unknown-none/lib"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000); .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rela.init : { *(.rela.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rela.fini : { *(.rela.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rela.ctors : { *(.rela.ctors) } .rel.dtors : { *(.rel.dtors) } .rela.dtors : { *(.rela.dtors) } .rel.got : { *(.rel.got) } .rela.got : { *(.rela.got) } .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) } .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) } .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) } .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) } .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) } .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rel.iplt : { PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .rela.iplt : { PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .rel.plt : { *(.rel.plt) } .rela.plt : { *(.rela.plt) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) } .iplt : { *(.iplt) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .sdata2 : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) } .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = ALIGN(0x1000) + (. & ( - 1)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } /* We want the small data sections together, so single-instruction offsets can access them all, and initialized data all before uninitialized, so we can shorten the on-disk segment size. */ .sdata : { *(.sdata .sdata.* .gnu.linkonce.s.*) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .sbss : { *(.dynsbss) *(.sbss .sbss.* .gnu.linkonce.sb.*) *(.scommon) } .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Default linker script, for normal executables */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-bpfle", "elf64-bpfbe", "elf64-bpfle") OUTPUT_ARCH(bpf) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/bpf-unknown-none/lib"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { /* Read-only sections, merged into text segment: */ PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000); .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rela.init : { *(.rela.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rela.fini : { *(.rela.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rela.ctors : { *(.rela.ctors) } .rel.dtors : { *(.rel.dtors) } .rela.dtors : { *(.rela.dtors) } .rel.got : { *(.rel.got) } .rela.got : { *(.rela.got) } .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) } .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) } .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) } .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) } .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) } .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rel.iplt : { PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .rela.iplt : { PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .rel.plt : { *(.rel.plt) } .rela.plt : { *(.rela.plt) } .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) } .iplt : { *(.iplt) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .sdata2 : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) } .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = ALIGN(0x1000) + (. & ( - 1)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } /* We want the small data sections together, so single-instruction offsets can access them all, and initialized data all before uninitialized, so we can shorten the on-disk segment size. */ .sdata : { *(.sdata .sdata.* .gnu.linkonce.s.*) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .sbss : { *(.dynsbss) *(.sbss .sbss.* .gnu.linkonce.sb.*) *(.scommon) } .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } /* Script for -z separate-code */ /* Copyright (C) 2014-2023 Free Software Foundation, Inc. Copying and distribution of this script, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. */ OUTPUT_FORMAT("elf64-bpfle", "elf64-bpfbe", "elf64-bpfle") OUTPUT_ARCH(bpf) SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/bpf-unknown-none/lib"); SEARCH_DIR("=/opt/rh/gcc-toolset-14/root/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SECTIONS { PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000); .interp : { *(.interp) } .note.gnu.build-id : { *(.note.gnu.build-id) } .hash : { *(.hash) } .gnu.hash : { *(.gnu.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } .gnu.version : { *(.gnu.version) } .gnu.version_d : { *(.gnu.version_d) } .gnu.version_r : { *(.gnu.version_r) } .rel.init : { *(.rel.init) } .rela.init : { *(.rela.init) } .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } .rel.fini : { *(.rel.fini) } .rela.fini : { *(.rela.fini) } .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } .rel.data.rel.ro : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) } .rela.data.rel.ro : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) } .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } .rel.ctors : { *(.rel.ctors) } .rela.ctors : { *(.rela.ctors) } .rel.dtors : { *(.rel.dtors) } .rela.dtors : { *(.rela.dtors) } .rel.got : { *(.rel.got) } .rela.got : { *(.rela.got) } .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) } .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) } .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) } .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) } .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) } .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } .rel.iplt : { PROVIDE_HIDDEN (__rel_iplt_start = .); *(.rel.iplt) PROVIDE_HIDDEN (__rel_iplt_end = .); } .rela.iplt : { PROVIDE_HIDDEN (__rela_iplt_start = .); *(.rela.iplt) PROVIDE_HIDDEN (__rela_iplt_end = .); } .rel.plt : { *(.rel.plt) } .rela.plt : { *(.rela.plt) } . = ALIGN(); .init : { KEEP (*(SORT_NONE(.init))) } .plt : { *(.plt) } .iplt : { *(.iplt) } .text : { *(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.exit .text.exit.*) *(.text.startup .text.startup.*) *(.text.hot .text.hot.*) *(SORT(.text.sorted.*)) *(.text .stub .text.* .gnu.linkonce.t.*) /* .gnu.warning sections are handled specially by elf.em. */ *(.gnu.warning) } .fini : { KEEP (*(SORT_NONE(.fini))) } PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .); . = ALIGN(); /* Adjust the address for the rodata segment. We want to adjust up to the same address within the page on the next page up. */ . = SEGMENT_START("rodata-segment", ALIGN(0x1000) + (. & ( - 1))); .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } .rodata1 : { *(.rodata1) } .sdata2 : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) } .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } /* These sections are generated by the Sun/Oracle C++ compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = ALIGN(0x1000) + (. & ( - 1)); /* Exception handling */ .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } .gnu_extab : ONLY_IF_RW { *(.gnu_extab) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections */ .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } .jcr : { KEEP (*(.jcr)) } .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) } .dynamic : { *(.dynamic) } .data : { *(.data .data.* .gnu.linkonce.d.*) SORT(CONSTRUCTORS) } .data1 : { *(.data1) } .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } /* We want the small data sections together, so single-instruction offsets can access them all, and initialized data all before uninitialized, so we can shorten the on-disk segment size. */ .sdata : { *(.sdata .sdata.* .gnu.linkonce.s.*) } _edata = .; PROVIDE (edata = .); . = .; __bss_start = .; .sbss : { *(.dynsbss) *(.sbss .sbss.* .gnu.linkonce.sb.*) *(.scommon) } .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) /* Align here to ensure that the .bss section occupies space up to _end. Align after .bss to ensure correct alignment even if the .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ . = ALIGN(. != 0 ? 32 / 8 : 1); } . = ALIGN(32 / 8); . = SEGMENT_START("ldata-segment", .); . = ALIGN(32 / 8); _end = .; PROVIDE (end = .); /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 (INFO) : { *(.comment); LINKER_VERSION; } .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } } %P: warning: %s, needed by %pB, may conflict with %s %P: warning: .note.gnu.build-id section discarded, --build-id ignored %P: warning: .note.package section discarded, --package-metadata ignored %F%P: failed to record assignment to %s: %E %F%P: %pB: bfd_elf_get_bfd_needed_list failed: %E %F%P: %pB: bfd_stat failed: %E unrecognised or unsupported token '%s' in search path %F%P: failed to add DT_NEEDED dynamic tag %P: warning: %s, needed by %pB, not found (try using -rpath or -rpath-link) %P: warning: -z dynamic-undefined-weak ignored %F%P: common page size (0x%v) > maximum page size (0x%v) %F%P: %pB: --just-symbols may not be used on DSO %P: warning: cannot create .note.gnu.build-id section, --build-id ignored %P: warning: --package-metadata is empty, ignoring %P: warning: --package-metadata=%s does not contain valid JSON, ignoring: %s %P: warning: cannot create .note.package section, --package-metadata ignored %F%P: %s: can't open for writing: %E %F%P: cannot use executable file '%pB' as input to a link %F%P: compact frame descriptions incompatible with DWARF2 .eh_frame from %pB %P: warning: cannot create .eh_frame_hdr section, --eh-frame-hdr ignored %F%P: failed to parse EH frame entries %F%P: failed to set dynamic section sizes: %E %F%P: %pB: can't read contents of section .gnu.warning: %E %F%P: %pA has both ordered and unordered sections %F%P: map sections to segments failed: %E %F%P: failed to strip zero-sized dynamic sections %F%P: looping in map_segments %F%P: warning: CTF strtab association failed; strings will not be shared: %s %F%P: warning: CTF symbol addition failed; CTF will not be tied to symbols: %s %F%P: warning: CTF symbol shuffling failed; CTF will not be tied to symbols: %s %s:%d: Warning: path components stripped from %s, '%s' Warning: .drectve `%s' unrecognized Warning: corrupt .drectve at end of def file %P: CodeView type %v references other type %v not yet declared %P: CodeView type %v references out of range type %v %P: CodeView symbol references out of range type %v %P: warning: truncated CodeView record S_LDATA32/S_GDATA32/S_LTHREAD32/S_GTHREAD32 %P: warning: name for S_LDATA32/S_GDATA32/S_LTHREAD32/S_GTHREAD32 has no terminating zero %P: warning: truncated CodeView record S_GPROC32/S_LPROC32 %P: warning: could not find end of S_GPROC32/S_LPROC32 record %P: warning: name for S_GPROC32/S_LPROC32 has no terminating zero %P: CodeView S_GPROC32_ID/S_LPROC32_ID symbol referenced unknown type as ID %P: warning: truncated CodeView record S_UDT %P: warning: name for S_UDT has no terminating zero %P: warning: truncated CodeView record S_CONSTANT %P: warning: unhandled type %v within S_CONSTANT %P: warning: name for S_CONSTANT has no terminating zero %P: warning: unexpected CodeView scope start record %v %P: warning: truncated CodeView record S_BUILDINFO %P: warning: truncated CodeView record S_BLOCK32 %P: warning: could not find end of S_BLOCK32 record %P: warning: truncated CodeView record S_BPREL32 %P: warning: truncated CodeView record S_REGISTER %P: warning: truncated CodeView record S_REGREL32 %P: warning: truncated CodeView record S_LOCAL %P: warning: truncated CodeView record S_INLINESITE %P: warning: could not find end of S_INLINESITE record %P: warning: truncated CodeView record S_THUNK32 %P: warning: could not find end of S_THUNK32 record %P: warning: truncated CodeView record S_HEAPALLOCSITE %P: warning: unrecognized CodeView record %v %P: warning: truncated CodeView type record LF_MODIFIER %P: warning: truncated CodeView type record LF_POINTER %P: warning: truncated CodeView type record LF_PROCEDURE %P: warning: truncated CodeView type record LF_MFUNCTION %P: warning: truncated CodeView type record LF_ARGLIST %P: warning: truncated CodeView type record LF_FIELDLIST %P: warning: truncated CodeView type record LF_MEMBER %P: warning: unhandled type %v within LF_MEMBER %P: warning: name for LF_MEMBER has no terminating zero %P: warning: truncated CodeView type record LF_ENUMERATE %P: warning: unhandled type %v within LF_ENUMERATE %P: warning: name for LF_ENUMERATE has no terminating zero %P: warning: truncated CodeView type record LF_INDEX %P: warning: truncated CodeView type record LF_ONEMETHOD %P: warning: name for LF_ONEMETHOD has no terminating zero %P: warning: truncated CodeView type record LF_METHOD %P: warning: name for LF_METHOD has no terminating zero %P: warning: truncated CodeView type record LF_BCLASS %P: warning: unhandled type %v within LF_BCLASS %P: warning: truncated CodeView type record LF_VFUNCTAB %P: warning: truncated CodeView type record LF_VBCLASS/LF_IVBCLASS %P: warning: unhandled type %v within LF_VBCLASS/LF_IVBCLASS %P: warning: truncated CodeView type record LF_STMEMBER %P: warning: name for LF_STMEMBER has no terminating zero %P: warning: truncated CodeView type record LF_NESTTYPE %P: warning: name for LF_NESTTYPE has no terminating zero %P: warning: unrecognized CodeView subtype %v %P: warning: truncated CodeView type record LF_BITFIELD %P: warning: truncated CodeView type record LF_METHODLIST %P: warning: malformed CodeView type record LF_METHODLIST %P: warning: truncated CodeView type record LF_ARRAY %P: warning: truncated CodeView type record LF_CLASS/LF_STRUCTURE %P: warning: unhandled type %v within LF_CLASS/LF_STRUCTURE %P: warning: name for LF_CLASS/LF_STRUCTURE has no terminating zero %P: warning: unique name for LF_CLASS/LF_STRUCTURE has no terminating zero %P: warning: truncated CodeView type record LF_UNION %P: warning: unhandled type %v within LF_UNION %P: warning: name for LF_UNION has no terminating zero %P: warning: unique name for LF_UNION has no terminating zero %P: warning: truncated CodeView type record LF_ENUM %P: warning: name for LF_ENUM has no terminating zero %P: warning: unique name for LF_ENUM has no terminating zero %P: warning: truncated CodeView type record LF_VFTABLE %P: warning: truncated CodeView type record LF_STRING_ID %P: warning: string for LF_STRING_ID has no terminating zero %P: warning: truncated CodeView type record LF_SUBSTR_LIST %P: warning: truncated CodeView type record LF_BUILDINFO %P: warning: truncated CodeView type record LF_FUNC_ID %P: warning: string for LF_FUNC_ID has no terminating zero %P: warning: truncated CodeView type record LF_MFUNC_ID %P: warning: string for LF_MFUNC_ID has no terminating zero %P: warning: truncated CodeView type record LF_UDT_SRC_LINE %P: warning: CodeView type record LF_UDT_SRC_LINE referred to unknown type %v %P: warning: CodeView type record LF_UDT_SRC_LINE referred to unknown string %v %P: warning: CodeView type record LF_UDT_SRC_LINE pointed to unexpected record type %P: warning: duplicate CodeView type record LF_UDT_MOD_SRC_LINE %P: warning: unrecognized CodeView type %v %P: warning: cannot create PDB file: %E %P: warning: cannot create old directory stream in PDB file: %E %P: warning: cannot create info stream in PDB file: %E %P: warning: cannot create TPI stream in PDB file: %E %P: warning: cannot create DBI stream in PDB file: %E %P: warning: cannot create IPI stream in PDB file: %E %P: warning: cannot create /names stream in PDB file: %E %P: warning: cannot create symbol record stream in PDB file: %E %P: warning: cannot create publics stream in PDB file: %E %P: warning: cannot create section header stream in PDB file: %E %P: warning: unable to get working directory %P: warning: unable to get program name %P: warning: unable to get full path to PDB %P: warning: truncated CodeView record S_LDATA32/S_LTHREAD32 %P: warning: cannot populate DBI stream in PDB file: %E %P: warning: cannot populate TPI stream in PDB file: %E %P: warning: cannot populate IPI stream in PDB file: %E %P: warning: cannot populate names stream in PDB file: %E %P: warning: cannot populate publics stream in PDB file: %E %P: warning: cannot populate info stream in PDB file: %E %X%P: can not create .edata section: %E %X%P: can not create .reloc section: %E %P: error: NULL decorated name for %s considering exporting: %s, abfd=%p, abfd->my_arc=%p %X%P: unsupported PEI architecture: %s Info: resolving %s by linking to %s (auto-import) %P: warning: auto-importing has been activated without --enable-auto-import specified on the command line; this should work unless it involves constant data structures referencing symbols from auto-imported DLLs %P: can't open output def file %s creating runtime pseudo-reloc entry for %s (addend=%d) %X%P: %H: variable '%pT' can't be auto-imported; please read the documentation for ld's --enable-auto-import for details %X%P: can't open .lib file: %s %X%P: %s(%s): can't find member in non-archive file%X%P: %s(%s): can't find member in archive%X%P: bfd_set_archive_head: %E %X%P: %s: this doesn't appear to be a DLL %s %s: 0x%08lx-0x%08lx (0x%08lx) %s dll-name: %s sym: %s addr: 0x%lx %s %X%P: error: can't use long section names on this arch %X%P: cannot export %s: invalid export name %X%P: error, duplicate EXPORT with ordinals: %s (%d vs %d) %P: warning, duplicate EXPORT: %s %X%P: cannot export %s: symbol not defined %X%P: cannot export %s: symbol wrong type (%d vs %d) %X%P: cannot export %s: symbol not found %X%P: error: ordinal used twice: %d (%s vs %s) %X%P: error: export ordinal too large: %d %P: base relocation for section `%s' above .reloc section %X%P: error: %d-bit reloc in dll _cygwin_noncygwin_dll_entry@12%s: error: too many @-files encountered %s: error: @-file refers to a directory could not create temporary fileboth ERRNAME and PEX_STDERR_TO_PIPE specified.PEX_STDERR_TO_PIPE used in the middle of pipelineCannot create temporary file in %s: %s Ykj{n{bbbbe|R|bb{{{{| |olknnbbnnon|bb|b|b||b||yyybbyyylkjbbbbbbbbbbbbxy_zLz5zzzyyybd{Z{L{>{b0{"{Ykj{zzzzjzzzzozkskpsknpsk bbbbbYkbrb5g*~~J~ ~}} ăHZ>@yb4y(ybby yxbրȀYkbbbbbrdVHbb}B bbbbbbbbbxxbbbbxllbvlhlZlbLlb=lwwwwlkwYk{wcwUwuuttttttntVt>t&ttssssslkjUs=s%ssrr=}%} }||qkjykqkpkpOqBqkYkpjpbYkjk1bYkʄbb.l`k`k`k`kkq\qlbkkqkqqqkqTxFx5x'xwbnjxnbbbbYkjPnmpmllkllkbbbqLpkBpjbb0ppoooooooeoGo&oxbxr}rarEr$rrx}U}1|{e%euuddddvvdd/vv vuSvAvHi6f$fiiddhh5i'iwdd wdvdvvdvvtssddssse%eddddddddddddsttitHt8t,t ttduuurudduVue%eFu3uuuu%etttttfejeje@dddd0deG| |d{{di{,{^xx~xAxxw>~~}}|}2}|||r|tsdhs\sddMs>s(sd{ {zzezzdddddzzzz|zQzCz5z(zzzzyyyyddyvyTy5y~ddddddd~d"dsrddddrffdfffdfdqf&rrqqeqeqqqpqXqJq2qqpppppnpRp6ppoooooroOo3oonnnnnnrnZnBn*n nmmme%emqmYm:mmmqwYwAw3w%wkeselfjejkvkfe&k%ejde%e~e~de~d~dbfeeeekkHfdeekelkkekrzrir[r2rdh%ehdddde%ehgg/ggegfeddd ljevj%edddjMj1jjjiiiii{iZirrlllylXl5lwwevu           !!!!!""""#"$"""""""%%nop<</01?@ABCEFGHQRST\]^_`abghi{ &Ekrstuvxyz}~ %%%!"<"<<23%%<%%%%%%%%%%%%%%%&'567>DPUVWXYZ[ceu{|w=!=E%%< %%%%%%%%%%%%% !"   <""==EMh==q%%$ $%%q=$"<%(%q%#IJKLMNO%%lalc$%=""% %&$<%% %O%me= '%= %<< )*+,-.48:Edfj{=%%%%%%89:;%8=% j%%%%%%%<l8989$%%%%=    MKbWg$<=<B=8:8:   )mE 23==%<@!PJ< !"%<qjq%ql89:;%8989q<q%%'q   !"#$%&'()*+9:;e12<%%%%I%%%&'IJKLMNO%bd%567%%%>D%%IJKLMNOP%UVWXYZ[T&cewnopr=u={| !"= E !"M%%<T%%%%%&'%% %h567%nop%>%%%%D{% <P==UVWXYZ[%%/ce$7F; AuC{| !"RE %M%ncT<iq%%&'h%lnopa567{>c$%D(=%+ %P&<%UVWXYZ[% %Ocem=e % %<%<u=%{|%%%%%%%%%&'(%%<%%%%%567l$>%%D !"P%%=UVWXYZ[ce u{|%&'YTr5675>D%&'PUVWXYZ[567ce>DuP{|UVWXYZ[ceu{|)*+,-.48:E !"dfjnop{ !"/01?@ABCEFGHQRST\]^_`abghinop${/01?@ABCEFGHQRST\]^_`abghinop{ !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !" !"=EMT&hnop{$&E !"%Ekrstuvwxyz}~krstuvxyz}~ !" !" !"sY?wbd/jkA(N6YX6AI!zX{| Oh,fkW)3ekQR`X@ar8&'(@iylj}zVX#Xc~#d0pstvwHyz{|}=>_7e7olmnolmtuABCDABC    X   tuvX     ?GGs !"#$%&'(H*I$%&'(J/^_`abcdefK - .49:G59:;<?ZEFW~S[\K]>O\Q45^)XZ_`gh"#$%&'(igoI1J{p/+x}K!"":%'*+/2*36,78:;<@AECFXRLNSU[b]cinqry2 !"#$%&'(  vuq^_`abcdefT n$%&$' ?hxrM !"#$%&'( !"#$%&'( !"#$%&'()*+,-./0123456789: !";#$%&'()*+<,-./0123456789:; !"#$%&'(< !"#$%&'( !"#$%&'( !"#$%&'( !"#$%&'( !"#$%&'( !"#$%&'( !"#$%&'(x !"#$%&'( !"#$%&'( !"#$%&'( !"#$%&'( !"#$%&'( !"#$%&'(, !"#$%&'( !"#$%&'(- !"#$%&'(. !"#$%&'(0 !"#$%&'(1 !"#$%&'(P !"#$%&'(a !"#$%&'(f !"#$%&'( !"#$%&'(l !"#$%&'(m !"#$%&'(s !"#$%&'(| !"#$%&'( !"#$%&'(G !"#$%&'( !"#$%&'(kIIJ/IJK:JK !"#$%&'(KLMNOPQRSTUVWXYLZ[\MNOPQRSTUVWXYZ[\ !"#$%&'( !"#$%&'( !"#$%&'( ]=mJ)>Lg@AU&^BCDE=TVwM~(j+FPD Bv GHpq @@@@@@@@@@@@@@@@@@@.@@@@-@oV@@@x,@@=@@@m@M@}$@>@@@@@@@ @@@@@@~z@@@@@@@@@@@@@@@@@@@@#V@@1A@@@@@@@@@@@@@@@@@@@@@@9 ]W< : h^aXYMONQrF;>D=@ABC?E.3nymuwhbuwZoLT^Xq( 1/ !$%4&6'* i\Z[<^ -7scpzovx[ l%*nmNKMJL_]GHSpVWP`c_I+20,#"58jkfd8-8UfbeRY`) {xqge8o?@+QR\jad|/012359;>AUOhs  t{7:.oRKgl68&SPk r,VRi<!'T4F8uwGC=tz"CBDxytv{|}DH(DE#)~I$J@@@@@M@@@@@@@-@A]b@h@@p-@GX/i@w@@@@ @ @@@@@@@@@@@@@7@8@A@@BDEHKLNO@@@@@@@@@@STU@W@PQh@@@"@@@g|@@@@wx@@@@bK@U@@}~@@@@@@@@[@!@+@@-@@2@)@@@@pp6v:vM'@@C@@@9FGJX]^@@*_`j@nN@@@@@@@@@@@@@@@@@qr@@ @@@@@@@@@@@@ @@@@@ @@@@@@@@@@@@@@%y@>.@eytLvv^^@@@@@@@@@@p}v@@i@i@@@@@@@@@$@@@@@@@@@@*@@@@@@@@ 8 @@@3@4@!@@@@"';@Ocvpp@@@@@)F@B@./@@2;@@@@W@@@@@@@@@@@w@>@@@@ @"v1f{@L@@@@h@@N@@Nd@9@@@@@@@@@@@@@@*<@@RO(j@@@@@w@X\]@@@^_`@R@@a @@@O?e@p@@2@@g@@mnqr@@RstRu@@@@Y5O+@ @@WY22@R2Rp,O@@@@@@-0@@6EGH@@@5@>@@@@22@22@@@@@@@@@KMOPQ>@@@TUVb@>@@@@@@@@@   "''-.3456789:;<=?ACFHJLNPRQUXWZ^bbdfhjootwz}#09DMXajnw{ "!'&,3@AEFJLQVW\^cgimoux   $+46#HJLRGac`ihpqrstuvw{|} &)00<=AENN\\fgkosz~"% ! <= #$&'()*+,-./0123456789:;>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~QISSR1RR RQQQQlUXUDU0UUUTLPrP^PJP6P"PPOPPVVyVeVQV=V)VXXX|XmXYXEXAW-WYLW}WiWLLUWWW1XX XL ZYYYYLYYZZZpZ\ZHZ4Z Z4M M MLOOOOO8[$[[ZZZZVVVVOnOZOFO2OO ONNNNNNN~NjNVNBN.NNNUVLLLLWWWW'TTSS[[[|[HMUoJoJWLULUlYXYDY0YYYXXXTTTWLULUlYXYDY0YYYXXXLTTTcLcLcLUcLcL_SSHMoJoJYMhM|MLMMMM;TJT`TTUL[P?L?L?L?L?L?L?L?L?Lst~uyylex$$bb  /-,/,-,1- 1,0 ,,3703556v9867865889U ;U_;]ddmo~;vn;;]mo;n]~!g_gpgpgpgg" #hhiiiishshihhsiijsjjjj##$A((A%j.j~.%%%**&B%C%BUrCB%UWr~%W%%)U&&&*W   XF&G&+  XFGFG,-.&0&X$$%%%12$4%67$$%%8:SSS<=SSSSSS>?@ABCDGIJKOQRSSSSSSS^^^UVWXYZ^^^^^^[^\]^_^`^acdfghij^lmopqrm^^^^^^s^t^w^y^z{}~^ffffffffffffffffffffffff|||||||||||||||      !"#$%&'   ()*+,-      ./01 2 346789:;<=?ABCDEGI      JKL N ===HPQSHT======VWXR=H=RYZ[\]^_`abcgRhijn======ors=t=llulllvlllllwlxyz{|}~lllllllll||||||||||||||||   ||||{zvutsrpokjiedca`_^]\[ZYXWUTSQPONMKJHGEDCBA@?>=<;:9876543210.-,+*)('&%$#"!      }|zyxwvutsqponmldcba`_^]\[ZYVTSRQPONMLKJIHE:876543210/-,+)'&"!{ztrqlkc[YXQPOMKJEDA?>=<:42.+)"  !"#$%&&'()*+,-./01234##56789#:;<#=################>##?######@ABCDE}GHIJKLM}q}DE~GHIJ KLM)- 9+ *.,Cr  </!0M"]1N^  sNOPQRSTUVWXYZ[\]^__`abcdefghijj\kl\\mnopq\rst\\\\\\N\NN\jjjjjj\\\\\\\\\\\\\\uvwxyz{|}~ !"'@B()@ABt C $ R %4t <5# u  6S&  7 FC CGCjk  <H\<m<Kn}bCCcC9Cx<<I<y<zucJdUWXCVY}<Cv<} } }Z}}wC  [ C  <C  < < }C   <x}dy [ e CCCz  <<<uv}}-{|}~.     Y  \  Z              F  N         }}  ===============AAAABACAADED     DACACAADD D!"#$%&'()*+,-./0123456789:;<=>?@A   BCDEFG      HIJKLMNOPQRSTUVWXYZ[\]a      bcde===^fgk_l======mnoh`ipqrstuvwxyz{j|}~======ponmlkjihgfeba`_^]}XWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/,+*)('&%$#"!      FFFFFFFFFFF     :::::::::::<<<<<<<>>>>>>>>>>@@@@@@@@@@eeeeeeeee{{{||||||~}|{zyxwtsrqponmlkjihgfcba`_^]\[ZYXWVUTSRQPOMLKJIHGEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! |}    ;}wvsrqpolihgfda`_TQPOL ?; 832('   ^ffff^^^^ffffffffQBoq5VWWSWWO;WW:9W8UWW8W5]Y$[\X i#rwnmr+.) W-WB>WWW5W=&8EWWW$#W"sWWW!W W{WWW/WW4WW579d     5 WWWW[CWWWUWWWWWWEM/W[WWWWWWWW.^pWWYuvtw~}~ke~zhWW}yxqyo{~{hxoqdsqoqzd^_dVg]ZYT`VSY`aQaUYLPJMATUUUD=TMQOFBIKT9:<1B61B8?@A<1:9-7..%421) !$      ws~np]   Rp~xr~zonuypcjhappq?DB<JKVWccXaEQ^'fLYGOWWHUEDSMB@M.3F+L>W!#%($!0(?@:1FPDKVH,1.MD_i\QlYdxvm|usgrv}xmo~z  W(!$'&%3(((2.:6@DFD*<8LPNAOISJZVXV[QXH[JigY[if\Rnaohyxp{s{qr}      %$$."/%'';7>9;WBMXcny       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ(' )*$xv&%('"(' !)*#$&%"!*#$$}  } }ZD;<yw;<71A71pqAraV_]jT30?\JI|30ob`^>U@S2+.HE[F>2m.E@>9L{dguW/9L{gu{{:8=R:8=nKl-stGsteYe,NhXCCfBfBc~6~6i44zMk5P5OQ&4:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&L:[:&&&&&&&&&&&&&&&&&&&&&v:&2&&&,?M?&!,&&<<<<&&1<~<<&?&>>&&&&&&&?A>M>=p%;,h,&&>p%c>}>&>h,>;;;,|99&&&&&&&&&&&&&&&&&&&&&&&&&&&&9(:888!,.9p%:9R9a9p9,J;#Dp%+;>;:;;;:;;;V;?e;'+>44;,&5s55?5*56558.P.v;*d2D223O3j33333444,&424111S8;8G8888/86%616=6I6U6z66666677772!242@2L2X2;..//'/3/?/K/W//j111!191E1///0$0C00H0j00 1000000-...h.t...---..,.=====_8T0UTTTT`U-oq?  "  m)   <9 G K !NR[ !d` c  l  "|!! "# ! @<:V)1-1F>C8DB]^.x !"#$%&'M(I)/9 >Xy ze2345CfDdg?ikbcHtpyKsw N /O[U2345/R`WahylbnoUqu}|J_ZYj-LTQ<=@A:;6VS7*+,{m\PEGr~0vXS[lAqtTTD=KB8;NS\\g223456 . * Z "]`OP/,+)X!^daRQ1-Y0Vcfbh[W(e_ 00UVVVV'%&VV#$]&&.9$=Lff__WWdT.ae5g%Lb&Wcjkmgniopg8rsUiih?hh8`hh! "# :@H@::(@? ?::>`=`=: ; ;>`=`=::::::::::::::::::::::::::::::::::::::::::>::::::: ; ;::::>>AA::::::::::::::o:MIIKL8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E@KGG|HFExOHHHHHHHHHHNP#NPMm@o@ommm'p0pmmmo'pmXoXomo::__unnamed::__unnamedpdbexecwdGNU LD 2.41* Linker ** Linker *0w,aQ mjp5c飕d2yҗ+L |~-d jHqA}mQDžӃVlkdzbeO\lcc=  n;^iLA`rqgjm Zjz  ' }Dңhi]Wbgeq6lknv+ӉZzJgo߹ホCՎ`~ѡ8ROggW?K6H+ L J6`zA`Ugn1yiFafo%6hRw G "/&U;( Z+j\1е,[d&c윣ju m ?6grWJz+{8 Ғ |! ӆBhn[&wowGZpj;f\ eibkaElx TN³9a&g`MGiIwn>JjѮZf @;7SŞϲG0򽽊º0S$6к)WTg#.zfJah]+o*7 Z-x4pep_implied_import_dllmake_onepep_find_data_importspep_dll_id_target<`+@ @%0ppl,lltpe_implied_import_dllmake_onepe_find_data_importspe_dll_id_target<`+@ @%/var/tmp/tmp;sЕ(ڕ$E\ci";P@P(B`PХDpp P`PP`8L`H`tP(d 0@P`p(<Pdx`p H\p@p pL.@....0/4`/H`0`1@203<P3T3l4055 :x ; p< =L!>`! ?!?!@!@,"Ad"D"pE"PF"G#IX#`Jl#J#J#PO#P\%\%]T%^%P_% `&`,&a`&c&d&Pe&g@'il'i'm(0n@(ot(o( o(`o(o(`p)p)qh)r)*`*t**0*$+ T+++@,,,`-|--P- \.@p.`.../Ъ/@0/Ыh///`/ /@<0d00000`1t11P11 2X2223h3303@334,4PX4@44 5`05H5\5p555P(6H6\606p66 7@<7x77p8<88p H9 9 9 9:0(:0|:`:;0;P,;`@;;;; < <@<X<0l<P<p<<P<H=p=== >P H>0!>#>#0? %?0)@)(@P+x@,@`-HA/A1AP2\B3B3B7`C7C:C`@>BBE E(D0D8DP 8D0A(B BBBJ (H@aYAG  FAI <ABEE D(D0 (A BBBG dBVEB B(A0A8Dq 8A0A(B BBBH  A(ptEAAD L AAD 0EOHD C ABG XFF|F:u F4o8 FFDC v ABJ P AHG \XGHPLt`GeFBA A(D0 (D ABBF f (D ABBA \HBEG E(G0D8DPI 8A0A(B BBBK g8C0D(D BBBH$HBBB B(A0A8D 8A0A(B BBBH HpdYiFBE B(G0A8NP 8A0A(B BBBA Z HZFEH E(H0D8D@ 8A0A(B BBBE ([bEOD  AAI 4H<]AHG o AAG q FAH ,]5BDH w ABH d^}BBB B(A0A8D@ 8A0A(B BBBF  8I0A(B BBBJ 4bjFAC N ABE FABHPcFHB E(A0A8DPL 8D0A(B BBBD XhgFBB B(A0A8DpxHlxAp 8H0A(B BBBJ HjzFEE H(D0D8DP 8A0A(B BBBH (DnRBDD @ABdpDnKEB B(A0H8Gx 8A0A(B BBBJ 8H<|vOBI D(A0(A BBBA$vqT K H A Dt@dwFBB A(A0Q (A BBBD E (A BIBE  (A BBBE Y (A BBBH zzz1RM I D0zWEID s DAF DAA$4 {zEID eAA\x{Kp{pYO H 4|MHA w AII dAI@`|RAD  ABG LABAH |9(}pH b A 8|}HL(FFB F(A0A8D@v 8A0A(B BBBF $;EAD nAA$;EAD nAA,L U H̀FBB B(A0A8D`t 8D0A(B BBBE dT0jBBB B(D0H8Gpr 8A0A(B BBBI 0 8J0A(B BBBM 8 HDFFEE E(D0H8D@ 8D0A(B BBBF H<Ev8lLH C HhlFIB B(H0G8K@E 8A0A(B BBBD LFBA A(D@C (A ABBI  (H ABBE 9JbL< )SBA A(O0(A ABBE``FBB E(D0D8FPN 8A0A(B BBBK 8H0A(B BBB40XFBI D(G0u(A ABBX+t $$pBEAL mAAL$`BEAL mAA(̕EFHD oAB<FBB D(A0 (A BBBI DFBE J(D0D8G@U8A0A(B BBB$<BEAL mAA$d9EAK eAA(i_ y (|EGJ k AAA \$ FBB E(D0G8GpxJKDIp 8D0A(B BBBD D I(X VFHI tAB uEc H  4oH FEJ E(D0A8FPk 8A0A(B BBBF !:Et !:Et( (J CBBE j (O ABBE $0OEID zAA(0JFID sAB(0 JFID sAB10(1L40,1xFID G0o  AABC 8`1$FJD D(G@s (A ABBH (1EHG0j AAH (1l CFID lAB(1 FFIC pAB$ 2 HEIG pAA(H2 FFIC pAB$t2!DEDL lAA|2(!EHG n FAG H JAM | HAK m CHH d AAA D MAG O AAO TJA,38$FDA ] ABE L3$IHy A 8h3$[FDA ~ ABD u ABH 83&FAA \ ABI X ABM 3&QHe C W4&4&UQP G i44'L4'`4't4'4 ' 4'!4$'4 '4'4'5'5'(5 '<5'!P5$'!d5@'x5<'#5X'#5t'!5'#5'#5'#5'#6(6')H`06(H \ D L6(z`64)t60)6,) 6()64)+6P)%6l)+HY6)+HY(7)QODK lAAD847)FDA J ABH J HDJ Hp7t*FBD A(D0b (A ABBG W(I DDB7*#7*$7+!7,+& 8H+! 8d+!48+%4L8+EMH p AAD AA8,'8,8,FDD \8- FBB H(A0A8J 8A0A(B BBBH I_A,9:K A H9L;EJ AA $l9<7EOI IIC90<K G 9=K A (9X>ALGc CAA <9>BBL D(A0| (A BBBH 88:\?FID n ABD H ABE $t:?TEAD GAAH:@FIB B(A0A8D@ 8A0A(B BBBE \:A&OBA D(D0 (A ABBE D (D ABBA eC0<H;BTPB A(A0y(A BBBH@; CFDD l ABC M ABH YAB`;C1BBB B(D0A8DPK 8A0A(B BBBJ n 8F0A(B BBBK d0<dFFBB B(A0D8GP 8F0A(B BBBA  8A0A(B BBBH l<JyFEB E(A0D8DPXJ`WXAPX 8F0A(B BBBA D 8C0A(B BBBA H=KFBA A(Dpo (A ABBE xUIxApT=0O h=,O|=(O$=$O~EDD nAA@=|O~ECG m AAB N AAH WGC =O[EG f AE ( >PrEDG I FAH @L>XPBBH D(D0G`_ 0A(A BBBF H>P\FBB B(A0A8DP  8A0A(B BBBA H>Q#FIH B(A0A8D@ 8F0A(B BBBA p(?R[FBB B(D0D8Dpy 8A0A(B BBBE  8D0A(B BBBI WxJZxAp?T-`?TMIE A(D0j (A BBBG E (A BBBD m (A BBBD `@UWBA A(D0 (C ABBA 0 (F ABBC oF0dx@LYFNB B(A0A8D` 8A0A(B BBBF ' 8K0A(B BBBE @]9T`@(^8A$^zBBA D(J0n (A ABBI TLAh^4FBE D(D0G@x 0A(A BBBD t 0F(A BBBG (AP`SEDG d AAJ A`@LO E _A`@LO E _B`@LO E _0B`@LO E _PBaCMZ I lB8aWMe F ^Bxa_Mh K ^HBa|FBB E(A0A8G@ 8A0A(B BBBG dBbFEB E(A0A8Dp  8C0A(B BBBG O 8A0A(B BBBG (`CdeEDI CAB HCfEFBB B(A0A8D] 8A0A(B BBBG LCj4BBB B(A0A8J 8A0A(B BBBH (DoHP@DoHPXDoCM` C tD0p+LDLpFBI A(D0 (D ABBE g (A ABBC D qMb A TTDq VDB B(A0A8DP/ 8A0A(B BBBA (PETugEAG H AAI |EubEW8EuFBA A(D0(A ABB(EPvoEMG A CAB $FvEMG DAD(F,w?FBE D(K0M; 0A(A BBBD pF94FyTBXV J V E V E UF({E$F}.AGG \AA4G}FED D(S0v(A ABBHG\~\Gh~pGt~'G~'G~fH]GQH_ I W(GDEAD0 AAA 4GؐTBXV J V E V E U4HE$PH.AGG \AA4xHFED D(S0v(A ABBHtHH'H'IĕfH]IQH_ I W(8I\"EAD0 AAA 4dI`TBXV J V E V E UIE$I\.AGG \AA4IdFED D(S0v(A ABBJܩ,J@J'TJ'hJ,fH]JQH_ I W(JĪEAD0 AAA JVJE$J.AGG \AA4$KFED D(S0v(A ABB\K(pK4K@!K\!KxfH]KнQH_ I W,K EAD0 AAA L#HW ,LAD w AC PLEHlLXBED A(K0v (A ABBE D(C ABBHLFGB B(A0A8D@Z 8A0A(B BBBE HM`BBB E(H0D8D@ 8A0A(B BBBA PM(Eb8lM(RBA D(G0 (A ABBK MAF S AE <MyAAG \ AAI W GCO RAA@ N8 FBB A(A0D@ 0A(A BBBD PN2@$pNoEDO TAApNdFBB A(A0H (A BBBE I (A BBBH T (A EDBH L (L BBBA \ OFBB B(D0A8GJVA 8D0A(B BBBA HlOZBB B(A0D8G@B 8A0A(B BBBH OE J HOFBB B(D0D8G` 8P0A(B BBBJ $P)H`@EDJ hAA8XhBNJ l ABG N ABG LhBEB B(D0C8D$ 8A0A(B BBBD HhBBE D(D0M (F BBBF c(C BBBH0iBBD D(F0t (F ABBG g(C ABBH|iHBBB B(D0D8G@n 8D0A(B BBBF Li̥BEB B(I0A8D 8D0A(B BBBD jAT,jXCBBB B(A0A8H Q D 8C0A(B BBBE `jPXBEG H(D0G8GPk 8F0A(B BBBF  8A0A(B BBBF djL BBB B(D0A8D 8F0A(B BBBE B 8C0A(B BBBB dPkԹBBB E(D0C8G 8F0A(B BBBB 0 8A0A(B BBBF kl7FBB B(A0A8G0 8C0A(B BBBG G]DItB B\ABDBKBSBZB`BdBmBvB|BBBBBBBByBEBBXeBBBBBBBBBEBBBBBBBBBCCHACCC&C5CHC_CpC}CCCCCCCCCCD)D7D?DFDSD^DeDkDpDuD}DDDDDDDDDDDDDDDDDDDDEEEE#EF9E?EFESEC\EuEeEmE|EEFfDE`DEEEEEECEEEMDEEEEFFF1DF(F8F?FEFNFcFhFsF~FFFFm~FFFFFFFFFsFFGGGG-G@GDGRGeGwGG GGGGGGGGGGGGGUGGHHH+H9HKHZHeHwHHHHHHHHHHHI III*IV4IIIZIfIkIpI|IIIIIIIIJJ6JFJXJ]JhJdJmJrJwJJJJJJZJJJJJJJJJJJcKKK-K=KIKRKbKgKlKqKwKKKKKKKKKKKKLLEWLL)L3L:LCLNLRLVLagOآsOAACoOXbbWhOccRO@qdd8OdOROO`yee\ZOPEOP(PFP)`]P(sPvPEPPffBФPFFBgPPGGX(PhPXPIPP'YllQPQLLQ%Qmie9QGQMM@QQnnXQrQNNhoQORooRyQOQQRQQQQQ QȦQQRRH RHRp"Rqq.Rrr:RiVRRRRcR+RuR*R RssRRSSRRPRxRttRVATTRR S RS6S VuuS9SSبnISTS8EWvWSVhqSxx}SSXXSSyySSYzS((SS))S T TP)T&T7T4TATgO0HTQToTrT~TPTTTTxTTTTTHTTTQM UUV/U8URUbUU{UUp^SUUUЭUU(UPUxV'VV^S,VEVIVRVcVVVVV@VwxVVدVWWEPW5WMWbW}WWWHWWWWXذ$X3XmozoooPoooo pp$p-!p.>mozoooPoooo pp$p-!p.>mozoooPoooo pp$p-!p.>mozoooPoooo pp$p-!p.ttuu tuDtGt)u4u1u;uDuGuUu-Ju._u/{|:v0nu1u2u3u4u5u6u7z8u9v;RvSvT+v<+v<6v=|>Iv? pM]vQxv@vAvBvCvDvEvEvFvGwH#wI7wJJwK^wLuwNwOPwUwV*xWBxXVxYixZzx[x\x]x^xaw_w`zbwc xd"xe:xfNxgaxhrxixjxkxlxmsxxxx xttuu tuDtGt)u4u1u;uDuGuUu-Ju._u/{|:v0nu1u2u3u4u5u6u7z8u9v;yDVvWvXwcwd+v<+v<6v=|>Iv? pN]vUxv@vAvBvCvEvFvFvGvHwI#wJ7wKJwLyMuwOwP(STyQyRwYwZBx[:xhVx\Nxiix]axjzx^rxkx_xlx`xmxaxnxbxozewf xgsxxxx xzooE{m~{~jQ |||E~(| 0|9| { Qw~A|d~H|8~C q| N~P|-C >~n}~} `}t{   u}   * 5 @G QY` j w '? KS asÁӁt   'Ktn}~} `}t{   u}   * 5 @G QY` j w '? F QyavhÁӁt   'Kt###` -9HRbm 9))o@ P  h`5 oo4ooJ2o0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p8z{pNZ Щ ` 0p @(%%%g@`@`)~(`X`?0XXP[X\0WQe=pW`PQW0YT@deep`?ppP[Pq\0`pjVpcp@p`PQoqPm@dee`?PP[ \00ppyp`PQ`@@dee@`?P[\0rr`PQ@dee`z{Tt+Nu+`{#U{@r@t@stsssssSsoss r:sr"sx`$t`00xr`@``pPa@z{Tt+Nu+`{#U{@rDt@stsssssSsoss r:sr"sx@$t ` 00p yyP0`@P `?pP[\0` yy`PQ@deez{l{+{#`{#U{+{+{#@{z|z| | ||rr r `"`ˀ `ـ`N`y y`y7`"ˀ ـN`GA$3a1 GA$3a1!9 GA$3p111399GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFY9u9GA+GLIBCXX_ASSERTIONSld.bfd-2.41-4.el8_10.1.x86_64.debugF7zXZִF!t/o]?Eh=ڊ2N` BU '\9GLzϢ[§P9ɣM^ [~)Md@FţS-\}m" M@h&X,q_]_5/|Smcab2w]:+-X(U(ݫS" ssE(їTS#}f½!;P|ds%:x. !އTSdZҳnVsEg?  ~;&rwP!; `I^"K5uDEIY7+e+g&(+hn;i]ىԪ ̈́?0 {og:\q62#{IR %96}p 3"H6/4<XG6z6FF EecCaCׂNq/mܫȳ$:{laͬuڏPrJY,Y(κo丱noq2?e?Q|bdn*9{ 3't2S_k_{i] qlEP4||{%YlE\rfHѣW7|X3(j\rc3 8hy^|"OBxV;qg$x\6ό6B%T$. {cU@wZ* 2Dj0lG;w} lo++`[K4:T AtH'OtsߜpfOjU*D}Ht:cr4ySwZoBT ( cfp8MFigEHDGv52BUqy'x(b'l NQf?k/U#zT-zZw:xM^K_VWmf-ǿ3ێӂ;|fK$c!!S4'FyG:w Kk;q9ᇗpHiql;W ,[ IyA EJRYMԾD {NF[5}̭<D]7'FUn>ؙ$K-`f"|6"oVT0@!6hxVt=2\Cz87FfR)+CU[O[vZ\c4hU1 EJAlass?Iaߣs "$k BƎdW ai,tjvo[0^G1h\zW_ܦkև(PEQoIcFzD!,.Ybvq:ps R=E D%< s jYZUIUNNƭ) ^ݳX#۠wzCc*;:d*iՍEب1WYcx`9: ⯈ԋ5lY/z,_pDi'F} Ta;97Ҏy hdAKER|-`u ]Xf,"Y7|H&uZuo,lƈ5_:|1ͱhJV_'K˖F7e>"kRfpǹHO8BF.͉jJ@&[ id;.Gt&!MH4.@S {HN`D +{qaq?uPoR;6\Y.7+&!}HKG?Q(@=Ό3Ů8]Bn)UW_xpZ$I{]AvjEWjun0 >McॾqE١FjpnsB^Ž0) ~iI?O`*71 iULK xN!=;t@tZv 8,%,uL='C`&Վ4b8UAa<9xs &~jU#B}t0p ң*;blς7AHҜ~`( y;.(:Ɲ|ו&vJsF^~K2E_W`E5 Z]ʭ Ab=]ڑ{rǝ<3b9W6|[ O)7\z;:>pildU(  SU@3wMTc-zW&neѿzy[r ;_x?2`HLl) G2 tqawx luB!: L3G]7v'T^JX}Pгy e2uKj3^)AQQ gS1"Q"-ۉ$#Z?]z̩ɛ3:]IiJʂB -]|!#JT(;L'6IӝhL&?S[ɞP?Q Kg™ؘve\1L-YXj[c6-l/v .`aYյ18pP h6I/50t=_K"{G;A݊z26e+alUY6CqچgjT R]N-3f,,B+ xƧt9mBM?@H᪌4TC_n6J@Cd&қ @%Ѣ<4ZVfYyk+OT{/߲5gmsk}vLF*5FDg@!/$M^zE-DD׳[Q٭ p3s'aL18j.b ? [6(*4hRd?sLҴnfiϴ!Asrhν}?vm ً[.xp+B[vAC6zy/y ͏`>֗Ԉ$-l+}y1ELo`r?jFo'B%Nؙ֔*?R R.ZR^p#%\ɰO9k1b;uFS།d0Oh% Oy4;$ %Z)޲KSC/H"x^bj׃?*U(ik963煊G4u#=1sls,Ce^7" wo7ta4%k˿Wtr׎Q>U{x9L(P#bwM_o%=u?Ҋȁ;q)hI dPZ"fvK$^Bm갱Nu~A^5%2xFj n.2jyrZ͘a?yrFy!8|ztTL DǎΉe1&Ѝ*vK!T({&QrlP WRŁ!a]ȐoݠйɒlR vz5CI[("Ouӭϟ9GPZQȫ킮ΪqXun~rj6kX-|,[7~6TK5vxKjLVr hNu)aXĪ& {vn7.XY2A=1РR&P@of,&" ?<_(I 3 KL4b)?An*]c)S4NB>,DX[ nd3Na_`4!uHK $D0wdK!o1%o@u+Y#8ɗCW㤎f/KU Hp!R7ʜܜN $@JϺP22.k }5ZM1 o )w}sbOr*GKG #y3(;`۬\)N,"Z3 jaC{ƿu?; FKϿK Vh JӤM@1O~ΧY[Ny^QkHsHbь* uWhנAm}sD&_:v ,oOtmp5lbѶ4, >3#/z?n˫nM ߢ^-Õ2 Ѡ fHE: JZ'vD?z5`&=T nL` djc=YGCMvp08BXdf%=dmbf=X빻 W 6YvQ? G~w(y<s?.%1b;դK h4*-k-rYA@xnחB9jaGݎG</_x |EoEcE.+*kmO^؉}'\p .KF&APV p)a߇w>+ }Ysy#A@;FƤLsds64GE'f3 -.Q4U׼E^Othچ2\s=TA >ȵ)0u P|uiۇljkT+_=Ӫzwi敽wj-KJ=aviU*&hUb O AwZIA^E=]uE܀Vot? ^F'RLx& KOCTQL٧\ӡ-r#ӫՕ;yGI{@WQFΛjAX@FEN[ *1&{.|S0VozDʋ>pBVoej:Mp*D R{#- ƾGhs:_.J7hpkiQvJKCwڧaKvB=ԗEO%vSОFJK6o ŒcYHJ^~Zl:*jqQcåZ^)4״:f@5$RKPw+Dd,Ͱ.h&nd!Go09V'xI!bH[w1y3I˚\Õq=oX] )JDN``7u/:tn2[p,# * ?M_q!K`ւ72ka<{3rI"`ۿjd%W,e#|X[)ͫ;@DXf+glI=?c!qĿqsﺴÄ+<2 l,Nfi'Eo,ed" %l5젮{S/} nTNjɪT NZšZ:Jш-J!Hˣ:aU/Zx) )*<ҒNt;f HҶOJgWG+dȤcf]3Ow|._v7 P&./80#a