OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [services/] [objloader/] [current/] [src/] [relocate_i386.c] - Blame information for rev 856

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
/* =================================================================
2
 *
3
 *      relocate_i386.c
4
 *
5
 *      Relocation types for the i386 processor.
6
 *
7
 * =================================================================
8
 * ####ECOSGPLCOPYRIGHTBEGIN####
9
 * -------------------------------------------
10
 * This file is part of eCos, the Embedded Configurable Operating System.
11
 * Copyright (C) 2005, 2008 Free Software Foundation, Inc.
12
 *
13
 * eCos is free software; you can redistribute it and/or modify it under
14
 * the terms of the GNU General Public License as published by the Free
15
 * Software Foundation; either version 2 or (at your option) any later
16
 * version.
17
 *
18
 * eCos is distributed in the hope that it will be useful, but WITHOUT
19
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
21
 * for more details.
22
 *
23
 * You should have received a copy of the GNU General Public License
24
 * along with eCos; if not, write to the Free Software Foundation, Inc.,
25
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
26
 *
27
 * As a special exception, if other files instantiate templates or use
28
 * macros or inline functions from this file, or you compile this file
29
 * and link it with other works to produce a work based on this file,
30
 * this file does not by itself cause the resulting work to be covered by
31
 * the GNU General Public License. However the source code for this file
32
 * must still be made available in accordance with section (3) of the GNU
33
 * General Public License v2.
34
 *
35
 * This exception does not invalidate any other reasons why a work based
36
 * on this file might be covered by the GNU General Public License.
37
 * -------------------------------------------
38
 * ####ECOSGPLCOPYRIGHTEND####
39
 * =================================================================
40
 * #####DESCRIPTIONBEGIN####
41
 *
42
 *  Author(s):    Anthony Tonizzo (atonizzo@gmail.com), andrew.lunn@ascom.ch
43
 *  Date:         2005-07-07
44
 *  Purpose:
45
 *  Description:
46
 *
47
 * ####DESCRIPTIONEND####
48
 *
49
 * =================================================================
50
 */
51
 
52
#include <cyg/infra/diag.h>     // For diagnostic printing.
53
#include <cyg/hal/hal_cache.h>
54
#include <cyg/hal/hal_io.h>
55
 
56
#include <pkgconf/objloader.h>
57
#include <cyg/objloader/elf.h>
58
#include <cyg/objloader/objelf.h>
59
 
60
#if CYGPKG_SERVICES_OBJLOADER_DEBUG_LEVEL > 1
61
// Always 16 characters long, with blank padding is necessary, so
62
//  the printing is pretty. If the name is longer than 16, shorten it.
63
// We print the relocation symbols only is 
64
//  CYGPKG_SERVICES_OBJLOADER_DEBUG_LEVEL is set to 2.
65
char *relocation_name[] =
66
{
67
    "", "R_386_32        ", "R_386_PC32      "
68
};
69
#endif
70
 
71
#if defined(CYGPKG_HAL_I386) || defined(CYGPKG_HAL_SYNTH_I386)
72
void
73
cyg_ldr_flush_cache(void)
74
{
75
    HAL_DCACHE_SYNC();
76
    HAL_ICACHE_SYNC();
77
}
78
 
79
// in:
80
// 
81
// sym_type  Type of relocation to apply,
82
// mem       Address in memory to modify (relocate).
83
// sym_value 
84
cyg_int32
85
cyg_ldr_relocate(cyg_int32 sym_type, cyg_uint32 mem, cyg_int32 sym_value)
86
{
87
  cyg_int32  i;
88
 
89
  // PPC uses rela, so we have to add the addend.
90
  switch(sym_type)
91
    {
92
      case R_386_32:
93
        HAL_READ_UINT32(mem , i);
94
        HAL_WRITE_UINT32(mem, i + sym_value );
95
      return 0;
96
      case R_386_PC32:
97
        HAL_READ_UINT32(mem , i);
98
        HAL_WRITE_UINT32(mem,  i + sym_value - mem);
99
        return 0;
100
      default:
101
        diag_printf("FIXME: Unknown relocation value!!!\n");
102
        return -1;
103
    }
104
}
105
#endif // CYGPKG_HAL_I386 || CYGPKG_HAL_SYNTH_I386
106
 
107
 

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.