Path: utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!mailrus!hellgate.utah.edu!helios.ee.lbl.gov!ucsd!ucsdhub!hp-sdd!hplabs!hp-ses!hpcuhb!hpcllla!hpclisp!hpclcac!cary From: cary@hpclcac.HP.COM (Cary Coutant) Newsgroups: comp.sys.hp Subject: Re: libc.a error when linking perl3.0 on HP-UX 3.10 Message-ID: <1340086@hpclcac.HP.COM> Date: 27 Nov 89 23:53:55 GMT References: <127@geysir.os.is> Organization: Hewlett-Packard Calif. Language Lab Lines: 17 > This is essentially correct. The assembler code for syscall.o used a short > branch code sequence when it should use a long branch code sequence. When > the syscall ends up more than a short branch away, the linker complains. I > believe that this has been fixed in 7.0. More precisely, the incorrect code in syscall.o was a conditional branch to the external symbol $cerror (in cerror.o). The linker can fix unconditional short branches (BL instructions) whose targets are too far away, but it cannot fix conditional branches (COMB, etc., instructions). A BL has a range of +/-256K, while a COMB has a range of only +/-2K; thus the conditional branches are legitimate only to local labels. In 7.0, syscall() was fixed so that it uses the BL instruction to reach $cerror. Cary Coutant, Series 800 Linker Project Manager HP California Languages Lab