Make list_push and list_remove functions rather than inline functions
to decrease size and avoid aliasing violations. * include/grub/list.h (grub_list_push): Move to ... * grub-core/kern/list.c (grub_list_push): ... here. Don't inline. * include/grub/list.h (grub_list_remove): Move to ... * grub-core/kern/list.c (grub_list_remove): ... here. Don't inline.
This commit is contained in:
parent
9d369087a9
commit
b00d7fb6c5
3 changed files with 33 additions and 20 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2012-02-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Make list_push and list_remove functions rather than inline functions
|
||||||
|
to decrease size and avoid aliasing violations.
|
||||||
|
|
||||||
|
* include/grub/list.h (grub_list_push): Move to ...
|
||||||
|
* grub-core/kern/list.c (grub_list_push): ... here. Don't inline.
|
||||||
|
* include/grub/list.h (grub_list_remove): Move to ...
|
||||||
|
* grub-core/kern/list.c (grub_list_remove): ... here. Don't inline.
|
||||||
|
|
||||||
2012-02-22 Vladimir Serbinenko <phcoder@gmail.com>
|
2012-02-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* configure.ac: Disable for now -Wstack-protector, -Wunreachable-code
|
* configure.ac: Disable for now -Wstack-protector, -Wunreachable-code
|
||||||
|
|
|
@ -68,3 +68,24 @@ grub_prio_list_insert (grub_prio_list_t *head, grub_prio_list_t nitem)
|
||||||
if (! inactive)
|
if (! inactive)
|
||||||
nitem->prio |= GRUB_PRIO_LIST_FLAG_ACTIVE;
|
nitem->prio |= GRUB_PRIO_LIST_FLAG_ACTIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
grub_list_push (grub_list_t *head, grub_list_t item)
|
||||||
|
{
|
||||||
|
item->prev = head;
|
||||||
|
if (*head)
|
||||||
|
(*head)->prev = &item->next;
|
||||||
|
item->next = *head;
|
||||||
|
*head = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
grub_list_remove (grub_list_t item)
|
||||||
|
{
|
||||||
|
if (item->prev)
|
||||||
|
*item->prev = item->next;
|
||||||
|
if (item->next)
|
||||||
|
item->next->prev = item->prev;
|
||||||
|
item->next = 0;
|
||||||
|
item->prev = 0;
|
||||||
|
}
|
||||||
|
|
|
@ -31,26 +31,8 @@ struct grub_list
|
||||||
};
|
};
|
||||||
typedef struct grub_list *grub_list_t;
|
typedef struct grub_list *grub_list_t;
|
||||||
|
|
||||||
static inline void
|
void EXPORT_FUNC(grub_list_push) (grub_list_t *head, grub_list_t item);
|
||||||
grub_list_push (grub_list_t *head, grub_list_t item)
|
void EXPORT_FUNC(grub_list_remove) (grub_list_t item);
|
||||||
{
|
|
||||||
item->prev = head;
|
|
||||||
if (*head)
|
|
||||||
(*head)->prev = &item->next;
|
|
||||||
item->next = *head;
|
|
||||||
*head = item;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
grub_list_remove (grub_list_t item)
|
|
||||||
{
|
|
||||||
if (item->prev)
|
|
||||||
*item->prev = item->next;
|
|
||||||
if (item->next)
|
|
||||||
item->next->prev = item->prev;
|
|
||||||
item->next = 0;
|
|
||||||
item->prev = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define FOR_LIST_ELEMENTS(var, list) for ((var) = (list); (var); (var) = (var)->next)
|
#define FOR_LIST_ELEMENTS(var, list) for ((var) = (list); (var); (var) = (var)->next)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue