Deleted Added
sdiff udiff text old ( 204211 ) new ( 208256 )
full compact
1/* $NetBSD: ppc_reloc.c,v 1.10 2001/09/10 06:09:41 mycroft Exp $ */
2
3/*-
4 * Copyright (C) 1998 Tsubai Masanari
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 12 unchanged lines hidden (view full) ---

21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
29 * $FreeBSD: head/libexec/rtld-elf/powerpc/reloc.c 204211 2010-02-22 16:49:45Z nwhitehorn $
30 */
31
32#include <sys/param.h>
33#include <sys/mman.h>
34
35#include <errno.h>
36#include <stdio.h>
37#include <stdlib.h>

--- 244 unchanged lines hidden (view full) ---

282 * Process non-PLT relocations
283 */
284int
285reloc_non_plt(Obj_Entry *obj, Obj_Entry *obj_rtld)
286{
287 const Elf_Rela *relalim;
288 const Elf_Rela *rela;
289 SymCache *cache;
290 int bytes = obj->nchains * sizeof(SymCache);
291 int r = -1;
292
293 /*
294 * The dynamic loader may be called from a thread, we have
295 * limited amounts of stack available so we cannot use alloca().
296 */
297 if (obj != obj_rtld) {
298 cache = mmap(NULL, bytes, PROT_READ|PROT_WRITE, MAP_ANON,
299 -1, 0);
300 if (cache == MAP_FAILED)
301 cache = NULL;
302 } else
303 cache = NULL;
304
305 /*
306 * From the SVR4 PPC ABI:
307 * "The PowerPC family uses only the Elf32_Rela relocation
308 * entries with explicit addends."
309 */
310 relalim = (const Elf_Rela *)((caddr_t)obj->rela + obj->relasize);
311 for (rela = obj->rela; rela < relalim; rela++) {
312 if (reloc_nonplt_object(obj_rtld, obj, rela, cache) < 0)
313 goto done;
314 }
315 r = 0;
316done:
317 if (cache) {
318 munmap(cache, bytes);
319 }
320 return (r);
321}
322
323/*
324 * Initialise a PLT slot to the resolving trampoline
325 */
326static int
327reloc_plt_object(Obj_Entry *obj, const Elf_Rela *rela)

--- 294 unchanged lines hidden ---