xf86-video-intel: Fix build with clang. Closes #242

This commit is contained in:
Dylan Araps 2020-11-20 06:11:54 +02:00
parent cbccf1efc2
commit abe06fae45
No known key found for this signature in database
GPG Key ID: 46D62DD9F1DE636E
4 changed files with 291 additions and 1 deletions

View File

@ -1,5 +1,7 @@
#!/bin/sh -e
patch -p1 < fix-clang.patch
export DESTDIR="$1"
export LDFLAGS="$LDFLAGS -Wl,-z,lazy"

View File

@ -1 +1,2 @@
f1ee7394446d38ef840d4327646421a3b744a7675955b6c29963a9887026c296 xf86-video-intel-846b53dacd96981329bcb9ef348e6acba0b53e94.tar.gz
f1ee7394446d38ef840d4327646421a3b744a7675955b6c29963a9887026c296
635e441d123efe501b8d7edbab811029a34f390b490d5f256b34223bb1fbe07e

View File

@ -0,0 +1,286 @@
From a92ccaf05efe8f11b3c5cd217d48ad3cf4caa090 Mon Sep 17 00:00:00 2001
From: Ethan Sommer <e5ten.arch@gmail.com>
Date: Mon, 16 Dec 2019 15:23:10 -0500
Subject: [PATCH] fix uninitialized variables causing segfaults when built with
clang
fixes #171
---
src/sna/kgem.c | 22 +++++++++++-----------
src/sna/kgem_debug.c | 4 ++--
src/sna/sna_damage.c | 4 ++--
src/sna/sna_display.c | 18 +++++++++---------
src/sna/sna_dri3.c | 2 +-
src/sna/sna_present.c | 4 ++--
6 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 6a35067c..488cfa47 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -2846,7 +2846,7 @@ static bool kgem_bo_move_to_cache(struct kgem *kgem, struct kgem_bo *bo)
static struct kgem_bo *
search_snoop_cache(struct kgem *kgem, unsigned int num_pages, unsigned flags)
{
- struct kgem_bo *bo, *first = NULL;
+ struct kgem_bo *bo = NULL, *first = NULL;
DBG(("%s: num_pages=%d, flags=%x\n", __FUNCTION__, num_pages, flags));
@@ -3112,7 +3112,7 @@ void kgem_retire__buffers(struct kgem *kgem)
static bool kgem_retire__flushing(struct kgem *kgem)
{
- struct kgem_bo *bo, *next;
+ struct kgem_bo *bo = NULL, *next;
bool retired = false;
list_for_each_entry_safe(bo, next, &kgem->flushing, request) {
@@ -3410,7 +3410,7 @@ static void kgem_commit__check_reloc(struct kgem *kgem)
#ifndef NDEBUG
static void kgem_commit__check_buffers(struct kgem *kgem)
{
- struct kgem_buffer *bo;
+ struct kgem_buffer *bo = NULL;
list_for_each_entry(bo, &kgem->active_buffers, base.list)
assert(bo->base.exec == NULL);
@@ -3422,7 +3422,7 @@ static void kgem_commit__check_buffers(struct kgem *kgem)
static void kgem_commit(struct kgem *kgem)
{
struct kgem_request *rq = kgem->next_request;
- struct kgem_bo *bo, *next;
+ struct kgem_bo *bo = NULL, *next;
kgem_commit__check_reloc(kgem);
@@ -3536,7 +3536,7 @@ static void kgem_close_inactive(struct kgem *kgem)
static void kgem_finish_buffers(struct kgem *kgem)
{
- struct kgem_buffer *bo, *next;
+ struct kgem_buffer *bo = NULL, *next;
list_for_each_entry_safe(bo, next, &kgem->batch_buffers, base.list) {
DBG(("%s: buffer handle=%d, used=%d, exec?=%d, write=%d, mmapped=%s, refcnt=%d\n",
@@ -3925,7 +3925,7 @@ static int compact_batch_surface(struct kgem *kgem, int *shrink)
static struct kgem_bo *first_available(struct kgem *kgem, struct list *list)
{
- struct kgem_bo *bo;
+ struct kgem_bo *bo = NULL;
list_for_each_entry(bo, list, list) {
assert(bo->refcnt > 0);
@@ -4209,7 +4209,7 @@ void _kgem_submit(struct kgem *kgem)
kgem->nreloc, kgem->nexec, kgem->nfence, kgem->aperture, kgem->aperture_fenced, kgem->aperture_high, kgem->aperture_total, -ret);
for (i = 0; i < kgem->nexec; i++) {
- struct kgem_bo *bo, *found = NULL;
+ struct kgem_bo *bo = NULL, *found = NULL;
list_for_each_entry(bo, &kgem->next_request->buffers, request) {
if (bo->handle == kgem->exec[i].handle) {
@@ -4573,7 +4573,7 @@ bool kgem_cleanup_cache(struct kgem *kgem)
static struct kgem_bo *
search_linear_cache(struct kgem *kgem, unsigned int num_pages, unsigned flags)
{
- struct kgem_bo *bo, *first = NULL;
+ struct kgem_bo *bo = NULL, *first = NULL;
bool use_active = (flags & CREATE_INACTIVE) == 0;
struct list *cache;
@@ -5377,7 +5377,7 @@ struct kgem_bo *kgem_create_2d(struct kgem *kgem,
uint32_t flags)
{
struct list *cache;
- struct kgem_bo *bo;
+ struct kgem_bo *bo = NULL;
uint32_t pitch, tiled_height, size;
uint32_t handle;
int i, bucket, retry;
@@ -7220,7 +7220,7 @@ void kgem_bo_sync__gtt(struct kgem *kgem, struct kgem_bo *bo)
void kgem_clear_dirty(struct kgem *kgem)
{
struct list * const buffers = &kgem->next_request->buffers;
- struct kgem_bo *bo;
+ struct kgem_bo *bo = NULL;
list_for_each_entry(bo, buffers, request) {
if (!bo->gpu_dirty)
@@ -7500,7 +7500,7 @@ struct kgem_bo *kgem_create_buffer(struct kgem *kgem,
uint32_t size, uint32_t flags,
void **ret)
{
- struct kgem_buffer *bo;
+ struct kgem_buffer *bo = NULL;
unsigned offset, alloc;
struct kgem_bo *old;
diff --git a/src/sna/kgem_debug.c b/src/sna/kgem_debug.c
index d90e5439..e417a99a 100644
--- a/src/sna/kgem_debug.c
+++ b/src/sna/kgem_debug.c
@@ -56,7 +56,7 @@ struct kgem_bo *
kgem_debug_get_bo_for_reloc_entry(struct kgem *kgem,
struct drm_i915_gem_relocation_entry *reloc)
{
- struct kgem_bo *bo;
+ struct kgem_bo *bo = NULL;
if (reloc == NULL)
return NULL;
@@ -86,7 +86,7 @@ static int kgem_debug_handle_is_fenced(struct kgem *kgem, uint32_t handle)
static int kgem_debug_handle_tiling(struct kgem *kgem, uint32_t handle)
{
- struct kgem_bo *bo;
+ struct kgem_bo *bo = NULL;
list_for_each_entry(bo, &kgem->next_request->buffers, request)
if (bo->target_handle == handle)
diff --git a/src/sna/sna_damage.c b/src/sna/sna_damage.c
index 8824a10b..a51935a3 100644
--- a/src/sna/sna_damage.c
+++ b/src/sna/sna_damage.c
@@ -215,7 +215,7 @@ static void __sna_damage_reduce(struct sna_damage *damage)
int n, nboxes;
BoxPtr boxes, free_boxes = NULL;
pixman_region16_t *region = &damage->region;
- struct sna_damage_box *iter;
+ struct sna_damage_box *iter = NULL;
assert(damage->mode != DAMAGE_ALL);
assert(damage->dirty);
@@ -1808,7 +1808,7 @@ void _sna_damage_debug_get_region(struct sna_damage *damage, RegionRec *r)
{
int n, nboxes;
BoxPtr boxes;
- struct sna_damage_box *iter;
+ struct sna_damage_box *iter = NULL;
RegionCopy(r, &damage->region);
if (!damage->dirty)
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 874292bc..ee38e1a6 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -467,7 +467,7 @@ static inline uint32_t fb_id(struct kgem_bo *bo)
unsigned sna_crtc_count_sprites(xf86CrtcPtr crtc)
{
- struct plane *sprite;
+ struct plane *sprite = NULL;
unsigned count;
count = 0;
@@ -479,7 +479,7 @@ unsigned sna_crtc_count_sprites(xf86CrtcPtr crtc)
static struct plane *lookup_sprite(struct sna_crtc *crtc, unsigned idx)
{
- struct plane *sprite;
+ struct plane *sprite = NULL;
list_for_each_entry(sprite, &crtc->sprites, link)
if (idx-- == 0)
@@ -1727,7 +1727,7 @@ static bool wait_for_shadow(struct sna *sna,
if ((flags & MOVE_WRITE) == 0) {
if ((flags & __MOVE_SCANOUT) == 0) {
- struct sna_crtc *crtc;
+ struct sna_crtc *crtc = NULL;
list_for_each_entry(crtc, &sna->mode.shadow_crtc, shadow_link) {
if (overlap(&sna->mode.shadow_region.extents,
@@ -1768,7 +1768,7 @@ static bool wait_for_shadow(struct sna *sna,
flip_active = sna->mode.flip_active;
if (flip_active) {
- struct sna_crtc *crtc;
+ struct sna_crtc *crtc = NULL;
list_for_each_entry(crtc, &sna->mode.shadow_crtc, shadow_link)
flip_active -= crtc->flip_pending;
DBG(("%s: %d flips still pending, shadow flip_active=%d\n",
@@ -3263,7 +3263,7 @@ static void
sna_crtc_destroy(xf86CrtcPtr crtc)
{
struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
- struct plane *sprite, *sn;
+ struct plane *sprite = NULL, *sn;
if (sna_crtc == NULL)
return;
@@ -3652,7 +3652,7 @@ bool sna_has_sprite_format(struct sna *sna, uint32_t format)
for (i = 0; i < sna->mode.num_real_crtc; i++) {
struct sna_crtc *sna_crtc = to_sna_crtc(config->crtc[i]);
- struct plane *plane;
+ struct plane *plane = NULL;
list_for_each_entry(plane, &sna_crtc->sprites, link) {
struct local_mode_get_plane p;
@@ -8639,7 +8639,7 @@ sna_mode_disable_secondary_planes(struct sna *sna)
for (c = 0; c < sna->mode.num_real_crtc; c++) {
xf86CrtcPtr crtc = config->crtc[c];
struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
- struct plane *plane;
+ struct plane *plane = NULL;
list_for_each_entry(plane, &sna_crtc->sprites, link) {
struct local_mode_get_plane p;
@@ -8737,7 +8737,7 @@ static bool
sna_crtc_hide_planes(struct sna *sna, struct sna_crtc *crtc)
{
struct local_mode_set_plane s;
- struct plane *plane;
+ struct plane *plane = NULL;
if (crtc->primary.id == 0)
return false;
@@ -8774,7 +8774,7 @@ void sna_mode_reset(struct sna *sna)
for (i = 0; i < sna->mode.num_real_crtc; i++) {
struct sna_crtc *sna_crtc = to_sna_crtc(config->crtc[i]);
- struct plane *plane;
+ struct plane *plane = NULL;
assert(sna_crtc != NULL);
diff --git a/src/sna/sna_dri3.c b/src/sna/sna_dri3.c
index ce4970ae..c5a7c820 100644
--- a/src/sna/sna_dri3.c
+++ b/src/sna/sna_dri3.c
@@ -175,7 +175,7 @@ static PixmapPtr sna_dri3_pixmap_from_fd(ScreenPtr screen,
{
struct sna *sna = to_sna_from_screen(screen);
PixmapPtr pixmap;
- struct sna_pixmap *priv;
+ struct sna_pixmap *priv = NULL;
struct kgem_bo *bo;
DBG(("%s(fd=%d, width=%d, height=%d, stride=%d, depth=%d, bpp=%d)\n",
diff --git a/src/sna/sna_present.c b/src/sna/sna_present.c
index 6bb7b927..7309871b 100644
--- a/src/sna/sna_present.c
+++ b/src/sna/sna_present.c
@@ -376,7 +376,7 @@ sna_present_get_crtc(WindowPtr window)
static void add_keepalive(struct sna *sna, xf86CrtcPtr crtc, uint64_t msc)
{
struct list *q = sna_crtc_vblank_queue(crtc);
- struct sna_present_event *info, *tmp;
+ struct sna_present_event *info, *tmp = NULL;
union drm_wait_vblank vbl;
list_for_each_entry(tmp, q, link) {
@@ -480,7 +480,7 @@ static int
sna_present_queue_vblank(RRCrtcPtr crtc, uint64_t event_id, uint64_t msc)
{
struct sna *sna = to_sna_from_screen(crtc->pScreen);
- struct sna_present_event *info, *tmp;
+ struct sna_present_event *info, *tmp = NULL;
const struct ust_msc *swap;
struct list *q;
--
GitLab

View File

@ -1 +1,2 @@
https://gitlab.freedesktop.org/xorg/driver/xf86-video-intel/-/archive/846b53dacd96981329bcb9ef348e6acba0b53e94/xf86-video-intel-846b53dacd96981329bcb9ef348e6acba0b53e94.tar.gz
patches/fix-clang.patch